我今天在一次采访中被要求列出调试和发布版本之间可能出现的四个差异。我想它们是指行为上的差异,而不是诸如调试信息之类的差异。我只能说出两个:
- 由于某些函数未内联,调试构建通常要慢得多。
- 由于速度差异,在具有竞争条件的多线程程序中,这些竞争条件可能仅在两个构建中的一个中变得明显。
我还能说出哪些其他差异?
我今天在一次采访中被要求列出调试和发布版本之间可能出现的四个差异。我想它们是指行为上的差异,而不是诸如调试信息之类的差异。我只能说出两个:
我还能说出哪些其他差异?
以下是一些差异的摘要:http: //msdn.microsoft.com/en-us/library/aa236698%28v=vs.60%29.aspx。这包括:
除了你的两个答案,这里还有四个:
Object x(3); Object y; y = x;
相对:
Object x(3); Object y = x;
另一点是许多库在调试时启用了额外的检查。具有讽刺意味的是,这可能意味着代码在调试构建中有效,但在发布构建中无效:
想象一个分配函数,由于性能原因,它在调试版本中清零内存,但在发布版本中不清零。如果随后读取此变量的值而不进行初始化,则调试版本会看到明确定义的(零)值,而发布版本可以看到任何值。
相反,调试构建检查当然可以捕获未定义的行为,例如通过检查访问是否[]
在定义的范围内。