gpt4 book ai didi

将一个整数结构转换为一个整数数组

转载 作者:太空狗 更新时间:2023-10-29 15:46:17 28 4
gpt4 key购买 nike

我正在使用一个库,该库具有一个接受结构数组的函数。该结构和函数具有以下布局:

struct TwoInt32s
{
int32_t a;
int32_t b;
};

void write(struct TwoInt32s *buffer, int len);

我的初始测试表明,此类结构的数组与 int32_t 的数组具有相同的内存布局,因此我可以这样做:

int32_t *buffer = malloc(2 * len * sizeof(int32_t));
/* fill in the buffer */
write((struct TwoInt32s*)buffer, len);

但是我想知道这是否普遍适用。使用 int32_t 数组大大简化了我的代码。

编辑:我忘记了 sizeof

根据我的阅读,C 保证了一些关于结构填充的事情:

  1. 成员不会被重新排序
  2. 填充只会在具有不同对齐方式的成员之间或结构的末尾添加
  3. 指向结构的指针指向与指向其第一个成员的指针相同的内存位置
  4. 每个成员都以适合其类型的方式对齐
  5. 为了实现对齐,结构中可能有未命名的空洞

据此我可以推断 ab 之间没有填充。但是,该结构可能会在末尾进行填充。我对此表示怀疑,因为它在 32 位和 64 位系统上都是字对齐的。有人对此有更多信息吗?

最佳答案

该实现可以自由填充结构 - ab 之间可能有未使用的字节。但是可以保证第一个成员不会从结构的开头偏移。

通常,您使用特定于编译器的编译指示来管理此类布局,例如:

#pragma pack(push)
#pragma pack(1)
struct TwoInt32s
{
int32_t a;
int32_t b;
};
#pragma pack(pop)

关于将一个整数结构转换为一个整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5381270/

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