一道关于内存分配的面试题:看一看这个sizeof是多少?
面试 c 内存分配 sizeof
#include <stdio.h>
int main(int argc, char *argv[])
{
typedef struct {
int key;
double num;
char name[9];
int age;
} Student;
Student s = {001, 999, "darthvade", 23};
printf("%d\n", sizeof(s));
return 0;
}
[解决办法]
是32 吧?
以double的8字节对齐。
char[9]跨越两个区域,int利用char[9]剩下的7个字节。 暂居第29-32个字节。
所以 一共是32个字节
[解决办法]
vs下32,gcc下28
[解决办法]
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
#include <stdio.h>
int main(int argc, char *argv[])
{
typedef struct {
int key;
double num;
char name[9];
int age;
} Student0;
printf("%d\n", sizeof(Student0));
#pragma pack(1)
typedef struct {
int key;
double num;
char name[9];
int age;
} Student1;
printf("%d\n", sizeof(Student1));
#pragma pack(2)
typedef struct {
int key;
double num;
char name[9];
int age;
} Student2;
printf("%d\n", sizeof(Student2));
#pragma pack(4)
typedef struct {
int key;
double num;
char name[9];
int age;
} Student4;
printf("%d\n", sizeof(Student4));
#pragma pack(8)
typedef struct {
int key;
double num;
char name[9];
int age;
} Student8;
printf("%d\n", sizeof(Student8));
#pragma pack(16)
typedef struct {
int key;
double num;
char name[9];
int age;
} Student16;
printf("%d\n", sizeof(Student16));
return 0;
}
//32
//25
//26
//28
//32
//32