首页 > 代码库 > c 语言 sizeof()及其偏移量的计算
c 语言 sizeof()及其偏移量的计算
c++基本数据类型的变量,在创建时开辟的内存空间大小如下:
int p; sizeof(p); 占用空间大小为 4个字节
float ;占用空间大小是4个字节;
char str; sizeof(char)占用空间的内存大小是1个字节
bool i; 占用一个字节空间的大小
short y;占用内存空间的大小是 2个字节;
double ;占用内存空间的大小是 8个字节;
指针类型占用4个字节的内存空间大小;
对于数组:如果是整形的数组其占用内存空间的大小是 元素总占用内存空间的和
如果是char类型的数组其占用内存空间的大小是 元素总占用内存空间的总和加1;
对于结构体和类其占用内存空间的大小,取决于起始位置的偏移量;
例如:
struct goods{
double x;
int y;
int h;
char c;
};
求sizeof(goods);
首先程序先为double x分配内存空间,内存空间的起始偏移量是 0; 而double占用8个字节,所以程序会率先分配8个字节;然后为int y分配内存空间,此时的偏移量是8,8是4的倍数,所以此时的内存空间占用大小是 8+4=12.然后为 Int h分配内存空间 同理得到分配的内存空间是 12+4=16;最后为char分配内存空间 16是1的倍数,所以分配的内存空间是 16+1=17; 而程序中分配内存空间的最大值是 8 ,,然而17不是8倍数;;;所以程序自动在17的基础上,继续为结构体分配内存直到内存大小事8的倍数。即自动分配7个字节的内存大小,
所以结算过程为 ; 0+8+4+4+1+7=24;即该结构体占用的内存空间是24个字节
再来:
struct hh{
char op;
int* io;
int* sy;
float yu;
char ry;
};
cout<<sizeof(hh)<<endl;
这个计算结果是20;
过程:
0+1+3+4+4+4+1+3=20;
此外对于栈,程序为栈区开辟的内存大小是48kb还是蛮大的
stack<int>s;
int p; sizeof(p); 占用空间大小为 4个字节
float ;占用空间大小是4个字节;
char str; sizeof(char)占用空间的内存大小是1个字节
bool i; 占用一个字节空间的大小
short y;占用内存空间的大小是 2个字节;
double ;占用内存空间的大小是 8个字节;
指针类型占用4个字节的内存空间大小;
对于数组:如果是整形的数组其占用内存空间的大小是 元素总占用内存空间的和
如果是char类型的数组其占用内存空间的大小是 元素总占用内存空间的总和加1;
对于结构体和类其占用内存空间的大小,取决于起始位置的偏移量;
例如:
struct goods{
double x;
int y;
int h;
char c;
};
求sizeof(goods);
首先程序先为double x分配内存空间,内存空间的起始偏移量是 0; 而double占用8个字节,所以程序会率先分配8个字节;然后为int y分配内存空间,此时的偏移量是8,8是4的倍数,所以此时的内存空间占用大小是 8+4=12.然后为 Int h分配内存空间 同理得到分配的内存空间是 12+4=16;最后为char分配内存空间 16是1的倍数,所以分配的内存空间是 16+1=17; 而程序中分配内存空间的最大值是 8 ,,然而17不是8倍数;;;所以程序自动在17的基础上,继续为结构体分配内存直到内存大小事8的倍数。即自动分配7个字节的内存大小,
所以结算过程为 ; 0+8+4+4+1+7=24;即该结构体占用的内存空间是24个字节
再来:
struct hh{
char op;
int* io;
int* sy;
float yu;
char ry;
};
cout<<sizeof(hh)<<endl;
这个计算结果是20;
过程:
0+1+3+4+4+4+1+3=20;
此外对于栈,程序为栈区开辟的内存大小是48kb还是蛮大的
stack<int>s;
c 语言 sizeof()及其偏移量的计算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。