缘起
我在《栈又溢出了》一文中记录了一个奇怪的栈溢出问题。虽然解决了,但是总感觉哪里不太合理。我想,vs
一定有一个合理的设置。一起折腾起来吧!
查找工程设置
本以为能找到某个编译选项对局部变量占用内存的行为进行控制。看遍了工程设置也没发现相关的设置项。release
版会不会有什么不同呢?毕竟,release
版会做一些优化,于是抱着试试看的心态编译了 release
版。您猜怎么着,居然没崩溃!
反汇编
赶紧查看下相关的反汇编,果然和预想的一样,函数局部变量占用的栈空间不再是 debug
版中的 0x12C0DC
,而是 0x064008
。换算成十进制大概是 409608
。
这说明三个局部变量被优化成了一个!release
优化果然给力!但是具体是哪一项优化导致的呢?该怎么排查呢?debug
版和 release
版结果不一样,最简单粗暴的方法就是找不同!
对比设置
把 debug
版的配置保存到 debug.txt
,release
版的配置保存到 release.txt
。然后用 beyond compare
比较两个文件的内容。