首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-03-14 
一道关于内存分配的面试题:看一看这个sizeof是多少?引用题目如下:问程序最后输出多少?(VC环境下)附:VC环境

一道关于内存分配的面试题:看一看这个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

热点排行