gpt4 book ai didi

c++ - 获取类成员变量的大小(无需运行代码)

转载 作者:行者123 更新时间:2023-11-30 02:43:42 25 4
gpt4 key购买 nike

有没有办法在不实际运行代码的情况下获取特定类的所有成员变量的大小? (即没有 sizeof(), offset_of() 操作)

objdump 或 otool 是否有一些选项可以从中间目标文件(甚至是最终的 ELF 文件)中提取此信息?

编辑:

“我想做什么?”:

我注意到在我们软件的两个版本之间,一个特定的类实例的大小膨胀了。这个类非常大,有很多很多成员变量。有问题的类在两个构建之间没有变化,但它的成员变量发生了变化。我试图找到罪魁祸首(这将是一种深度优先搜索,因为我必须继续越来越深入地挖掘每个成员变量,直到找到它)并且需要一种可扩展的方法来做这无需求助于 printfs() 和比较。

最佳答案

您可以打印编译时间常量,例如sizeof 而不运行代码。示例:

class X
{
int x;
int y;
int z;
};


template <int i>
class foo;

foo<sizeof(X)> x;

错误消息清楚地说明了 sizeof 表达式的值:

test.cpp:12:16: error: aggregate ‘foo<12> x’ has incomplete type and cannot be defined
foo<sizeof(X)> x;

也适用于 offsetof。您还可以一次查询更多偏移量:

#include <cstddef>
foo<offsetof(X,X::x)> offset_x;
foo<offsetof(X,X::y)> offset_y;
foo<offsetof(X,X::z)> offset_z;

结果:

test.cpp:15:23: error: aggregate ‘foo<0> offset_x’ has incomplete type and cannot be defined
foo<offsetof(X,X::x)> offset_x;
^
test.cpp:16:23: error: aggregate ‘foo<4> offset_y’ has incomplete type and cannot be defined
foo<offsetof(X,X::y)> offset_y;
^
test.cpp:17:23: error: aggregate ‘foo<8> offset_z’ has incomplete type and cannot be defined
foo<offsetof(X,X::z)> offset_z;

关于c++ - 获取类成员变量的大小(无需运行代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25942780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com