[C++]-内存管理-堆-栈-数据端-代码端

本文详细阐述了C++程序中的内存分布,包括全局变量、静态变量、局部变量在数据段和栈中的位置,以及动态内存分配在堆上的使用。同时,讨论了sizeof和strlen两个操作的区别,前者计算数据类型或表达式的字节数,后者则用于计算字符串的长度(不包括结束符)。还提到了数组名在不同情况下的含义。
摘要由CSDN通过智能技术生成

C++中内存划分为不同的区域,为了更好理解本文将阐述内存分布情况

有了上面的图解,我们来做部分实战题。

 来看看globalVar--全局数据--数据段,staticGlobalVar--全局静态数据--数据段,staticVar--局部静态变量--数据段,localVar--非静态局部变量--栈,num1--非静态局部变量--栈。

char2--非静态局部变量--栈,*char2--非静态局部变量--栈,

pchar3--非静态局部变量--栈,*pchar3--常量--代码段,

ptr1--指针--栈,*ptr1--动态内存--堆。

sizeof(num1) = 40;一个int类型4字节,共40字节

sizeof(char2) = 5;strlen(char2) = 4;

sizeof""字符串计算时包括'\0'5字节,strlen不计算'\0'共4字节。

sizeof(pChar3) = 4/8;strlen(pChar3) = 4;

32位指针4字节,64位指针8字节,strlen(指针)= 整个数组的长度(不包括'\0')= 4字节。

sizeof(ptr1) = 4/8。


sizeof和strlen区别?


sizeof() 是一个判断数据类型或者表达式长度的运算符,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。


strlen是一个计数器的工作(库函数),它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
 

1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。

2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

3. 除此之外所有的数组名都表示首元素的地址。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值