int main(...)
{
printf("hello world");
printf("hello world");
}
你"猜",在内存中有几个"hello world"字符串?
我让100多号人回答这个问题,结果有3个答案: 0个,1个,2个
0个显然不对了
那么是1个,还是2个呢?
答案是: 不一定
这和编译器有关
看图
上面是VC6编译器产生的可执行文件a.exe (cl a.cpp) 下面是g++产生的a.exe,里面只有一份"hello world" (g++ a.cpp)
不同的编译器默认情况下对代码的优化程度不一样。
cl a.cpp /O1 (cl a.cpp /O2)产生的文件中也只有一份"hello world"~~
注:VC6 默认情况下Debug版本是 /Od Release版本是 /O2