之前观察到sizeof的一些现象,现做下记录。
实验一:
struct test{
int a;
int b;
}test1;
printf("test1=%d.\n",sizeof(test1));
实验结果为:test1=8;
实验二:
struct test{
int a;
int b;
char c;
char d;
}test2;
printf("test2=%d.\n",sizeof(test2));
实验结果为:test2=12;
实验三:
struct test{
int a;
int b;
char *c;
}test3;
printf("test3=%d.\n",sizeof(test3));
实验结果为:test3=16;
由此可证明一下几点:
(1)结构体的大小取决于结构体中元素类型的大小和个数。
(2)在ubuntu中结构体内存是4对齐的。
(3)在64位系统中,指针类型不是4个字节,而是8个字节。
此外,还见证了一个实验:
char *buf=NULL;
memset(buf,0,sizeof(buf));
这样会报错!我认为原因是buf指针指向了null地址处,该地址处是操作系统严格管控的位置,是不允许被操作的,所以会报错。