例:
int x;code..... x is able to be used in all this code.actually used here.end
与
code.....int x;actually used here.end
谢谢.
解决方法 写出逻辑上最有意义的东西(通常更接近使用).编译器可以并且将会发现这样的事情并生成对目标体系结构最有意义的代码.您的时间比尝试再次猜测编译器与处理器上的缓存的交互更有价值.
例如在x86上这个程序:
#include <iostream>int main() { for (int j = 0; j < 1000; ++j) { std::cout << j << std::endl; } int i = 999; std::cout << i << std::endl;}
相比:
#include <iostream>int main() { int i = 999; for (int j = 0; j < 1000; ++j) { std::cout << j << std::endl; } std::cout << i << std::endl;}
编译:
g++ -Wall -Wextra -O4 -S measure.cg++ -Wall -Wextra -O4 -S measure2.c
使用diff measure * .s检查输出时给出:
< .file "measure2.cc"---> .file "measure.cc"
即使是:
#include <iostream>namespace { struct foo { foo() { } ~foo() { } };}std::ostream& operator<<(std::ostream& out,const foo&) { return out << "foo";}int main() { for (int j = 0; j < 1000; ++j) { std::cout << j << std::endl; } foo i; std::cout << i << std::endl;}
VS
#include <iostream>namespace { struct foo { foo() { } ~foo() { } };}std::ostream& operator<<(std::ostream& out,const foo&) { return out << "foo";}int main() { foo i; for (int j = 0; j < 1000; ++j) { std::cout << j << std::endl; } std::cout << i << std::endl;}
除了文件名之外,由g -S生成的组件差异的结果仍然相同,因为没有副作用.如果有副作用那么这将决定你构建对象的位置 – 你想在什么时候发生副作用?
总结以上是内存溢出为你收集整理的c – 迟到声明变量更有效吗?全部内容,希望文章能够帮你解决c – 迟到声明变量更有效吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)