【发布时间】:2020-03-18 03:34:31
【问题描述】:
我在问自己,如何改进代码。如果遇到以下问题:
int i = 10;
int s = i * 12;
int main(){ }
当您查看 PE 格式的代码时,您会注意到,在 .data 段中既没有声明 i 也没有声明 s,尽管它们的值可能已经预先计算过了。它们在运行时被初始化。
这里我有另一个代码的例子,它有同样的现象。值也像上面的示例一样声明
在通过EntryPoint之前在Debugger中查看:
0133BF7C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0133BF8C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
通过入口点后:
0133BF7C E9 01 00 00 DF 02 00 00 64 00 00 00 00 00 00 00 é...ß...d.......
0133BF8C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
如何在 C++ 的 .data 部分中声明一个具有初始值的变量以节省宝贵的计算时间?
或者 .data 部分在执行开始之前从未被初始化过?
【问题讨论】:
-
使用
constexpr?那样的话,担心优化通常是在浪费时间。 -
我相信如果您将变量 i 和 s 设为静态,它们将被放置在 .data 段中。或者,如果它们是常量,您可以使用 constexpr 而不是 static。
-
一个适当的优化编译器只会删除所有这些。始终使用优化构建测试与性能相关的东西。
-
我感觉您正在查看调试代码,在这种情况下,一切都是徒劳的。
-
@Acorn 谢谢它解决了
标签: c++ visual-studio variables optimization