有没有办法知道编译后的可执行文件中的变量或对象使用了多少指令或资源?
例如,我想知道空的 std::vector<int>
有多少空间将在编译后的二进制文件中使用。
最佳答案
告诉编译器生成汇编列表(编译器/链接器选项,取决于您的编译器和平台)。然后使用变量或对象编译一次,一次不使用变量或对象。比较两个生成的列表中的行数。这应该会给你指令数的差异。
编辑:由于各种优化、对齐、代码重新排序,测量可能不是 100% 准确。正如@Klaus 指出的那样,当超过内联阈值并从更多来源生成更小的列表时,可能会出现悖论结果。
编辑:特别是与 C++ 模板相关的内容,另请参阅 Can we see the template instantiated code by C++ compiler
(您提到“在已编译的可执行文件中”,所以我假设您问的是编译时,而不是运行时)。
关于C++获取编译代码中使用的一部分代码的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36400069/