bug*_*gra 5 c++ arrays sizeof offsetof
我有一个结构定义为:
struct smth
{
char a;
int b[];
};
Run Code Online (Sandbox Code Playgroud)
当我打电话sizeof,并offsetof在这个结构:
cout << sizeof(struct smth) << endl;
cout << offsetof(struct smth, b) << endl;
Run Code Online (Sandbox Code Playgroud)
输出是:
4
4
Run Code Online (Sandbox Code Playgroud)
为什么当stuct的大小是4而char使用1个字节时,int数组的偏移量是4?为什么会有某种填充?另外,为什么int数组根本不占用任何空间?
为什么当stuct的大小是4而char使用1个字节时,int数组的偏移量是4?为什么会有某种填充?
有填充因为C标准允许它; 编译器经常对齐变量以提高性能.
另外,为什么第二个变量根本不占用任何空间(看起来像这样)?
它是C99灵活的阵列成员 - 这就是它的全部要点.想法是分配你的结构,如:
struct smth *s = malloc(sizeof *s + 10 * sizeof s->b[0]);
Run Code Online (Sandbox Code Playgroud)
然后你会有一个像b10个元素阵列那样运行的结构.
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |