C++获取编译代码中使用的代码部分的大小
C++ get the size of a part of code used into the compiled code
有没有办法知道编译的可执行文件中的变量或对象使用了多少指令或资源?
例如,我想知道一个空的std::vector<int>
将在编译的二进制文件中使用多少空间。
告诉编译器生成一个程序集列表(编译器/链接器选项,取决于编译器和平台)。然后用编译一次,不用变量或对象编译一次。比较生成的两个列表中的行数。这应该会给你指令数的差异。
编辑:由于各种优化、对齐和代码重新排序,测量可能不是100%准确。正如@Klaus所指出的,当超过内联占用并从更多来源生成更小的列表时,可能会出现悖论结果。
EDIT:特别是与C++模板有关的,请参阅。我们能看到C++编译器实例化的模板代码吗
(您提到了"在编译的可执行文件内部",所以我认为您询问的是编译时,而不是运行时)。
《C++模板完整指南》一书(第6.6.4章)的作者建议将所谓的Tracer对象用于类似的目的。
这是报价:
"tracer是一个用户定义的类,可以用作要测试的模板的参数满足模板的要求,且不超过这些要求。然而,更重要的是,示踪剂应该生成对其调用的操作的跟踪。例如,这允许通过实验验证算法的效率以及操作序列。"
示踪剂对象的简单示例:
#include <iostream>
#include <vector>
class TracerObject
{
public:
TracerObject()
{
++n_created;
}
~TracerObject()
{
++n_destroyed;
}
static int created_count(void)
{
return n_created;
}
static int destroyed_count(void)
{
return n_destroyed;
}
private:
static int n_created;
static int n_destroyed;
};
int TracerObject::n_created = 0;
int TracerObject::n_destroyed = 0;
int main(void)
{
{
std::vector<TracerObject> vector(2, TracerObject());
}
std::cout << "Constructor calls: " << TracerObject::created_count() << std::endl;
std::cout << "Destructor calls: " << TracerObject::destroyed_count() << std::endl;
int i;
std::cin >> i;
return 0;
}
相关文章:
- 有没有办法在c ++中清除空数组,请检查下面的代码以获取说明
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 困在PyObject_GetAttrString():如何从C++代码中获取Python函数脚本
- 从 C++11 代码中获取系统内存和 CPU 使用率
- 在运行基本 Avx512 代码时获取非法指令
- 从C++代码中获取已编译的 glsl 着色器统一参数的大小
- 我在合并排序代码中获取垃圾值
- 在代码中获取虚拟值C++而不是预期值
- 如何在我的代码中获取相同结构的结构中的引用
- 是否可以从代码中获取依赖库的位置
- 如何在我的 c++ 代码中获取运行时的双重释放错误
- 如何在代码中获取功能使用的名称
- 如何从 Windows 代码页码获取 ICU 转换器
- 在给定的代码中获取错误(标识符未定义)
- 优化代码以获取给定范围内可被整数整除的整数数
- 在此字符串操作代码中获取out_of_range错误
- 如何从虚拟密钥代码中获取密钥文本
- 从多行代码中获取单词C++
- 为什么这个C代码比这个C++代码快?获取文件中的最大行
- 在代码中获取数据