C/C++通过分区管理内存
只是软件层面会分区,硬件不会分区
易错点
数组名在栈,const修饰的变量名也在栈上
const int a=0;//a在栈上
内存管理小题
答案:
CCCAA
AAADAB
*char2为什么在栈上而不是常量区?
因为下列语句对应的操作是将常量区的“abcd"memecpy到栈上并用char2指向栈上该空间
char char2[] = "abcd";
tips:
cout不能打印char* /string*,会自动识别为指向的空间,
此功能只限于指向字符串的指针
C++空间申请/释放
new/delete主要是为了类和对象设计的
特点:
- new出来的指针不用检查,因为new失败的话会抛异常,系统自动识别
- new=malloc+构造函数
- delete=析构函数+free
- operator new和malloc差别:前者会抛异常
- new部分初始化时,剩下的自动初始化为0
C和C++内存申请/释放,除了用法方面,对于内置类型没啥区别
申请时都不会初始化(但new可以初始化)
对于自定义类型
new更方便(类名后传参)
new/delete多个须多参数构造的对象的用法: