c - 内存位置和范围

标签 c memory struct bit

假设我有一个结构:

struct guitar{
   long guitarID;
   short brand:3;
   short strings: 6;
   short price;
}x[5][5]; //Thanks chux

如果 x 的地址是 0xaaa 并且内存以 4 的倍数对齐,那么 x[1] 的地址会是什么?

我想知道的另一件事是品牌和字符串之间的数字范围是多少,因为它们受到位域的影响?

最佳答案

假设长 8 字节,短 2 字节,内存为 4 字节对齐,结构的大小为 8 字节 + 3 位 + 6 位 + 2 字节 = 8 + 4 = 12 字节。

x[1] 只不过是 &x[1][0]。

如果 x 是 0xaaa,则 x[1] 是 0xaaa + (5 * 12) = 0xaaa + 60。

所以 x[1] 距离 x 有 60 个字节。

关于c - 内存位置和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248787/

相关文章:

c - GDB 不允许我读取 argv 内存段

c - 我怎样才能像这样进行结构类型转换?

相对于结构定义位置(和填充)的 C malloc 偏移量

检查单向链表是否为回文 C

c - 写入分配的二维数组

c++ - 使用 socket recv 函数读取 stdin 上的流

c - 重命名文件预操作 Windows Minifilter 驱动程序

javascript - JavaScript 声明的函数在脚本加载时消耗多少内存?

C# 日期时间堆栈内存

c++ - 在 C++ 中按结构成员对列表进行排序