我正在使用一個函數庫,它具有一個結構數組。這種結構和功能具有以下佈局:將一個int結構轉換爲一個int數組
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可以保證約結構填充幾件事情:
- 成員將無法重新排序
- 填充只會成員之間加入不同的對齊或結構的末尾
- 指向結構的指針指向與其第一個成員相同的內存位置
- each membe r被以適當的方式對準,用於它的類型
- 可以有根據需要在結構無名孔來實現對準
從這我可以推斷出a
和b
在它們之間沒有填充。但是結構可能會有填充。我對此表示懷疑,因爲它在32位和64位系統上都是字對齊的。有沒有人有關於此的更多信息?
小心'len'是什麼意思。這是分配的內存量(可能不是)或數組中的結構數量!使用sizeof()和malloc:malloc(2 * sizeof(TwoInt32s)); – James 2011-03-21 17:29:47
@詹姆斯 - 是的,我忘了sizeof。這是在我的實際代碼中。 – 2011-03-21 17:43:47