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;  






郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。