为什么这个结构的大小是 40,而它看起来应该是 12/24?
Why is the size of this struct 40 when it seems like it should be 12/24?
在一个我必须处理的旧代码项目中,我有这个Coord结构。据我所知,它的大小应该是 12 字节或 24 字节。但是,sizeof(Coord
返回 40。有人可以解释一下这个额外的尺寸是从哪里来的吗?
struct Coord
{
Coord();
float inate[3] = {0,0,0};
float& x = inate[0];
float& y = inate[1];
float& z = inate[2];
Coord operator*(const float&);
Coord operator=(const Coord&);
Coord operator=(const float[3]);
Coord dot(const Coord& c);
Coord cross(const Coord& c);
};
计算机上指针/引用的大小可能是 8 个字节。因此,Coord 对浮点数组使用 12 个字节,对三个引用使用 24 个字节,因此结构本身需要 36 个字节。其余 4 个字节是由于填充以对齐单词边界上的指针。
如何在不产生指针成本的情况下定义等效结构?您可以使用联合:
struct Coord
{
union {
float inate[3] = {0,0,0};
float x, y, z;
};
};
对于此版本的 Coord,sizeof 为 12。
引用是指针。根据内存型号(32 位、64 位(,基准将需要 4 个字节或 8 个字节。64 位模型将在 8 个字节边界上对齐数据,这意味着在 inate[2] 和参考 x 之间填充 4 个字节。
因此,对于 32 位,您得到 4 字节 x 3 + 4 字节 x 3 = 24 字节;在 64 位模型中,您得到 4 字节 x 3 + 4 字节用于填充 + 8 字节 x 3 = 12 + 4 + 24 = 40 字节。
相关文章:
- std::vector的包装器,使数组的结构看起来像结构的数组
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 尽管一切看起来都很好,但值不会交换
- 自制的上衣:看起来一样,但不完全相同
- 如何使它看起来像正在下的雪
- 如何用逗号分隔输出?如何改进此代码以使其看起来更体面?
- 我的代码看起来不错,但某些输入会导致不需要的输出
- 为什么这个结构的大小是 40,而它看起来应该是 12/24?
- 我需要将阵列样式的邻接矩阵转换为矢量样式(以使其看起来更好)
- 结构化绑定:当某些内容看起来像引用并且行为类似于引用,但它不是引用时
- 如何使QTextEdit看起来被禁用
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 看起来如此主要的错误.cpp:(.text.startup+0xd6):未定义对"vtable for Counter"的引用?
- C 时间测量看起来太慢了
- 我应该如何使 std::filesystem 看起来符合 Visual Studio 2015 的标准
- 写入.ini文件 - SimpleIni SetValue 尽管看起来成功了,但什么也没做
- std::string 上的 substr 无法正常工作,因为存在一些不可见但看起来像空格的字符
- 使标题看起来像它们在不同的文件夹中
- 我如何编写看起来像方法的lambda表达式