whois域名查询网站,织梦网站博客模板,天津设计公司排行榜,网站建设文化服务公司C/C中程序内存区域划分
内核空间#xff08;用户代码不能读写#xff09;栈#xff08;函数中存放的变量#xff09;内存映射段堆#xff08;重点#xff09;数据段#xff08;静态区#xff09;全局变量 / 静态变量代码段#xff08;常量区#xff09;
试分析下列… C/C中程序内存区域划分
内核空间用户代码不能读写栈函数中存放的变量内存映射段堆重点数据段静态区全局变量 / 静态变量代码段常量区
试分析下列代码
int globalVar 1;// 这个变量globalVar 存放在静态区原因globalVar是全局变量
static int staticGlobalVar 1;//静态区 是静态变量
void Test()
{
static int staticVar 1;//静态区静态变量
int localVar 1;// 栈区 int num1[10] {1, 2, 3, 4};//num1存放在栈区*num1存放在栈区
char char2[] abcd;//char2存放在栈区*char2存放在栈区
这段代码是将abcd拷贝下来开辟空间放置在栈区
const char* pChar3 abcd;//PChar3存放在栈区*pChar3存放在常量区
//这里解释一下pChar3 pChar3是const char* ,所指向的内容不能被修改 这段代码可以说明s存放的位置与t存放的位置一样 int* ptr1 (int*)malloc(sizeof (int)*4);//ptr1存放在栈区*ptr1存放在堆区
int* ptr2 (int*)calloc(4, sizeof(int));//与上面同理
int* ptr3 (int*)realloc(ptr2, sizeof(int)*4);//与上面同理
free (ptr1);
free (ptr3);
} C中的new和delete操作符
C语言向堆上申请空间使用malloc realloc calloc申请空间放回首地址
C使用new申请堆上的空间返回首地址
new的好处
简洁可以控制初始化对于自定义类型自动调构造函数申请失败会抛异常无需手动检查
申请内置类型
#includeiostream using namespace std; int main() { int* t new int(1);//申请一个整形并且将这个整形赋值为1 cout *t endl; delete t;//释放这块空间 return 0; }
申请内置类型数组
#includeiostream using namespace std; int main() { int* arr new int[10] { 1 };//申请10个整形的空间第一个值赋为1其余赋为0 delete[] arr;//释放空间 return 0; }
申请自定义类型 下面演示抛异常
#include iostream
using namespace std;
void func()
{while (1){int* temp new int[1024 * 1024 * 100];cout temp endl;}
}
int main()
{try{func();}catch (const exception e){cout e.what() endl;}return 0;
}