c++ - 调试和发布版本之间可能出现的差异?

标签 c++

<分区>

今天在接受采访时,我被要求列出调试版本和发布版本之间可能的四个差异。我想他们的意思是行为上的差异,而不是调试信息之类的差异。我只能说出两个:

  1. 由于某些函数未内联,因此调试构建通常要慢得多。
  2. 由于速度差异,在具有竞争条件的多线程程序中,这些竞争条件可能仅在两个构建之一中变得明显。

我还能说出哪些其他差异?

最佳答案

这里总结了一些差异:http://msdn.microsoft.com/en-us/library/aa236698%28v=vs.60%29.aspx .它包括:

  • 堆布局(调试内存分配器的使用)
  • 宏(包括 assert 语句,以及“#ifndef NDEBUG”中包含的任何内容,在某些情况下可能会有很大差异——例如,我知道一些 boost 库在 Debug模式下编译时会向结构添加额外的字段,可用于执行完整性检查)
  • 优化(大部分在调试版本中禁用)
  • 初始化和错误指针:未初始化的变量在您分配给它们之前具有未定义的状态;但在调试版本中,它们通常会被初始化为某个已知状态(例如全零或全#CCCCCCC 等)。

关于c++ - 调试和发布版本之间可能出现的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688145/

相关文章:

c++ - 修改列表列表

c++ - 访问嵌套类(表现得像 friend ,但又不是)

c++ - Firefox 插件域限制 - 类似于 IE 的 SiteLock

c++ - VS 2012 中的可变参数模板(Visual C++ 2012 年 11 月 CTP)

c++ - 如果我知道数据在哪里,我能知道什么? 0xfffffff7fffd9d8 与 0x10019c1e0?

c++ - 如何检查忽略其模板参数的类型

c++ - C++ 中不可访问的成员函数

c++ - switch语句默认范围?

c++ - 跳转到 C++ 第 5 章问题 7

C++; MPI : Send struct with vector of vectors through MPI