gpt4 book ai didi

c - 字节顺序是否影响结构成员存储到内存中的方式

转载 作者:太空狗 更新时间:2023-10-29 14:52:16 26 4
gpt4 key购买 nike

struct
{
uint32_t i;
uint32_t i2;
}s;
printf("%p %p", &s.i, &s.i2);

如果上面的例子打印:

0 4

这意味着结构中最顶层的成员位于较小的内存地址,随后的元素按递增顺序存储在连续的地址中。

如果平台字节顺序颠倒了怎么办?这种模式会改变吗?这是否在某些 C 标准的规范中的某处提到过?

最佳答案

在决定 struct 成员偏移的过程中,字节顺序不是一个因素。初始成员将始终分配在偏移量零处;其余成员将按照它们在 struct 声明中出现的顺序分配到较高的偏移量。

独立于系统的程序编码方式如下:

struct {
uint32_t i;
uint32_t i2;
}s;
intptr_t p = (intptr_t)&s;
intptr_t pi = (intptr_t)&s.i;
intptr_t pi2 = (intptr_t)&s.i2;
printf("%tu %tu\n", pi-p, pi2-p);

Demo 1. intptr_t 允许您将指针视为整数; %tu 格式说明符将 ptrdiff_t 值打印为无符号数。

你也可以这样做:

struct S {
uint32_t i;
uint32_t i2;
};
printf("%tu %tu\n", offsetof(struct S, i), offsetof(struct S, i2));

Demo 2 .

关于c - 字节顺序是否影响结构成员存储到内存中的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38992147/

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