今天在一次采访中,我被要求列出四个差异:may发生在调试和发布版本之间。我想它们意味着行为上的差异,而不是诸如调试信息之类的差异。我只能说出两个:
- 由于某些函数未内联,调试构建通常要慢得多。
- 由于速度差异,在具有竞争条件的多线程程序中,这些竞争条件可能仅在两个构建之一中变得明显。
我还能说出哪些其他差异?
以下是一些差异的总结:http://msdn.microsoft.com/en-us/library/aa236698%28v=vs.60%29.aspx http://msdn.microsoft.com/en-us/library/aa236698%28v=vs.60%29.aspx。这包括:
- 堆布局(使用调试内存分配器)
- 宏(包括断言语句,以及“#ifndef NDEBUG”中包含的任何内容,在某些情况下可能存在重大差异 - 例如,我知道某些 boost 库在调试模式下编译时会向结构添加额外的字段,这可以是用于执行健全性检查)
- 优化(主要在调试版本中禁用)
- 初始化和错误指针:未初始化的变量在分配给它们之前具有未定义的状态;但在调试版本中,它们通常会被初始化为某种已知状态(例如全零或全#CCCCCCCC等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)