__attribute__((packed)) 如何使用 举例
时间: 2024-12-02 10:18:40 浏览: 17
`__attribute__((packed))` 是 C/C++ 编程中GCC编译器提供的一种特性,用于取消结构体或联合体的字节对齐,使得它们紧凑地存储在内存中。下面是一个简单的例子:
```c
#include <stdio.h>
// 使用 packed 属性取消字节对齐
struct PackedStruct {
char a;
char b;
char c __attribute__((packed)); // 只对 'c' 字符取消对齐
float d;
} packedExample;
// 如果不使用 packed,float 需要4字节对齐,所以 'c' 后面会有空位
struct NormalStruct {
char a;
char b;
char c;
float d;
} normalExample;
int main() {
printf("Packed size: %zu bytes\n", sizeof(packedExample));
printf("Normal size: %zu bytes\n", sizeof(normalExample));
return 0;
}
```
当你运行这个程序并查看`sizeof`的结果,你会发现`packedExample`的总大小可能小于`normalExample`,因为`c`后面的`float`被紧凑地放在了后面,没有字节对齐造成的空隙。
然而,使用`__attribute__((packed))`会有一些潜在风险,比如可能导致CPU缓存行未充分利用,以及潜在的内存访问不连续等问题。因此,除非非常必要,一般不推荐广泛使用此特性。
阅读全文