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;

时间: 2024-10-19 17:44:57

c 语言 sizeof()及其偏移量的计算的相关文章

用三分钟理解c语言sizeof

一.概念 sizeof是单目操作符,同++等操作符一样.作用是以字节形式输出操作对象所在储存大小. 二.用法 a.操作数据类型 如sizeof(int),输出int类型在内存中所占的字节长度,具体取决于具体环境,本机输出为4. b.操作变量 如 char a[6]; printf("%d\n" ,sizeof(a)),因为已经定义了char数组长度,所以输出值为6. 三.常见问题 有以下几个例子,需要引起注意: 例子1: int testSizeOf(char x[]) { retur

关于C语言中结构体大小计算

结构体大小的计算,.网上说法一大堆还都不一样分什么对齐不对齐,偏移量什么的.. 在此稍微举例简单总结下: 对齐原则:每一成员的结束偏移量需对齐为后一成员类型的倍数 补齐原则:最终大小补齐为成员中最大值的倍数 拿个题目做例子:[(开始偏移量)+此处字节 = 结束偏移量] 1 struct MyStruct 2 { 3 int i; // (0) + 4 = 4,后面一个为2,已经对齐 4 char c; // (4) + 2 = 6,后面一个为结构体,直接拆开看第一个,int=4,所以对齐为(4)

C语言 sizeof函数详解

1. 定义:sizeof是何方神圣sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数.MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with avariable or a type (including aggregate types). This keyword returns a value of type siz

C语言:sizeof()运算符

sizeof可以用来计算一个变量,一个常量,一种数据类型所占的内存字节数 sizeof一共有3种形式 sizeof(变量\常量) sizeof(10); char c = 'a';sizeof(c); sizeof 变量\常量 sizeof 10;char c = 'a';sizeof c; sizeof(数据类型) sizeof(float); 注意:不能sizeof 数据类型

C语言写的秒速计算四则混合运算项目

开发语言:C语言 开发工具:Visual Studio 2017 整理时间:2017年8月2日 源代码:500行: 开发方式:C语言多文件模式开发 实现功能:在文件中写入四则混合运算表达式(无论有多长...),按运行即可得出结果. 四则混合运算表达式形如: (19+67)*33-45/5+17*52+39/3+.... 意义:在实际快速计算的同时,对学习也有如下意义:对堆栈的学习应用,多多文件的学习巩固 项目演示截图: 其他C语言项目参考:

【c语言】位段大小的计算以及宏的应用

// 位段大小的计算以及宏的应用 #include <stdio.h> #include <malloc.h> #define MAX_SIZE A+B struct _Record_Struct { unsigned char Env_Alarm_ID : 4; unsigned char Paral : 2; unsigned char state; unsigned char avail : 1; }*Env_Alarm_Record; int main() { int A

【c语言】结构体大小计算的例子

// 结构体大小计算的例子 // 默认对齐数为4 #include <stdio.h> union tagAAA { struct { char ucFirst;//1 short ucSecond;//2 char ucThird;//1 }half; short kk;//2 }number; struct tagBBB { char ucFirst;//1 short ucSecond;//2 char ucThird;//1 short ucForth;//2 }half; struc

C语言 sizeof

sizeof 可以用来获取类型.数组和表达式的字节数 Example: 获取数组长度: int arrLen = sizeof(array) / sizeof(array[0]); Remarks: 数组作为形参时自动退化为指针(不论是定长或变长),所以sizeof(array)为指针长度

一起talk C栗子吧(第三十四回:C语言实例--巧用溢出计算最值)

各位看官们,大家好,上一回中咱们说的是巧用移位的例子,这一回咱们说的例子是:巧用溢出计算最值. 闲话休提,言归正转.让我们一起talk C栗子吧! 大家都知道,程序中的变量都有一个取值范围,这个范围也计算机和编译器都有关系.我们举个实际的例 子进行说明:在32位的计算机上,如果使用4个字节存储int类型的变量也就是说使用了32位的存储空间. 这时int类型变量的取值范围是:负2的32次方到正2的32次方-1,具体的数值是-2147483648到2147483647. 如果把不在这个范围内的数值赋