读书人

一路关于内存分配的面试题:看一看这个

发布时间: 2013-03-14 10:33:15 作者: rapoo

一道关于内存分配的面试题:看一看这个sizeof是多少?

引用
题目如下:问程序最后输出多少?(VC环境下)
附:
VC环境下各基本数据类型的内存分配
char 1字节
int 4字节
double 8字节



#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;
}
面试 c 内存分配 sizeof
[解决办法]
是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

读书人网 >C语言

热点推荐