问题标签 [structure-packing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 结构体大小:2+4+2+2+4 = 16
为什么sizeof();
这个结构的 16 字节?我正在用 g++ 编译。
c++ - 带有 char、double、int 和 at 的结构的大小
当我只运行代码片段时
它给了我这样的结果:
总数:17。
但是当我测试包含这些数据类型的 sizeof 结构时,它给了我 24,我很困惑。额外的 7 个字节是什么?
这是代码
:编辑
我已经像这样更新了我的代码
现在它显示了 16 个字节。好不好,还是我丢失了一些重要的字节?
c++ - C 结构中的内存对齐
我正在使用 32 位机器,所以我想内存对齐应该是 4 个字节。假设我有这个结构:
普通添加的大小是 6 个字节,我想对齐的大小应该是 8,但sizeof(myStruct)
返回我 6。
但是,如果我写:
普通添加大小为 10 个字节,对齐大小应为 12,这次是sizeof(myStruct) == 12
.
有人可以解释有什么区别吗?
c++ - 将结构的成员声明为 uint32_t 时的额外字节
使用 stdint.h 库中的 uint32_t 类型时遇到问题。如果我运行以下代码(在 Ubuntu linux 11.10 x86_64,g++ 版本 4.6.1 上):
然后我得到以下输出:
我正在做的是打印出结构的总大小和结构的每个成员的大小。
在 xbee_tx_b 的情况下,成员的大小加起来就是结构的大小 (14)
在 xbee_tx_a 的情况下,成员的大小加起来为 18 个字节......但结构的大小是 20 个字节!
xbee_tx_a 和 xbee_tx_b 之间的唯一区别在于 dest_addr_64_X 成员的类型。它们是 xbee_tx_a 中的 uint32_t 和 xbee_tx_b 中的 uint16_t。为什么我使用 uint32_t 时结构的大小大于其成员大小的总和?那 2 个额外的字节是从哪里来的?
谢谢!
c - Sizeof 运算符返回不正确的大小?
可能重复:
为什么结构的 sizeof 不等于每个成员的 sizeof 之和?
将结构的成员声明为 uint32_t 时的额外字节
出于某种原因,该sizeof
运算符返回此结构的虚假大小(48
而不是40
):
所以这里是一个简单的测试:
哪个打印:
1 2 4 8:48
这是怎么发生的?如果你把所有的尺寸加在一起,你就得到了40
,不是48
。到底是48
从哪里来的?
如果这是一些奇怪的x86-64
特权,我如何确保结构的所有字段占据我希望它们占据的数量(我正在向这个结构投射一堆字节)?
c - _int64 位字段
我需要在一个结构中使用一个 6 字节(48 位)位域,我可以将其用作无符号整数进行比较等。如下所示:
但不知何故,在 64 位 Windows 上,sizeof
这个结构总是返回 8 个字节而不是 6 个字节。任何指针表示赞赏?
c++ - 包含位域的结构的大小
我试图理解位域的概念。但我无法找到为什么 CASE III 中以下结构的大小为 8 个字节。
案例一:
大小(b);// 输出:1(因为 unsigned char 在我的系统上占用 1 个字节)
案例二:
案例三:
我不明白为什么案例 III 的输出为 8。我期待 1(char) + 4(unsigned) = 5。
opengl - 1 字节对齐与 4 字节对齐(像素打包)
我正在阅读 OpenGL 3.x 的 OpenGL SuperBible。我很难理解整个“像素包装概念”。我知道通常一个 199px 宽的图像需要 597 个字节 [(199 * 3)3 对于每个颜色通道 RGB]。我的第一个问题是为什么这只是有时是正确的,作者说这仅适用于 4 字节对齐系统。他接着说将添加额外的三个字节以使其容易被四整除,我也不明白。所以真的我的问题是 4 字节对齐的意义是什么——这实际上是什么意思?然后作者说替代方案是 1 字节对齐,我也不明白。
作者说 .TGA 是 1 字节对齐或“紧密”的,而 .bmp 是 4 字节对齐的。
什么是 4 字节对齐,1 字节对齐,为什么我应该使用一个而不是另一个?什么时候应该使用 .tga 或 .bmp 进行纹理处理?
c++ - 结构的大小如何随不同的数据类型而变化
我正在使用 Linux 32 位操作系统和 GCC 编译器。
我尝试了三种不同类型的结构。在第一个结构中,我只定义了一个char
变量。这个结构的大小是1,这是正确的。
在第二个结构中,我只定义了一个int
变量。这里结构的大小显示为 4 也是正确的。
但是在第三个结构中,当我定义一char
和一时int
,这意味着总大小应该是 5,但输出显示为 8。谁能解释一下结构是如何分配的?
输出:结构尺寸:1
输出:结构尺寸:4
输出: