网站建设 毕业设计,大兴网站建设服务公司,电脑怎么直接卸载wordpress,江苏天宇建设集团网站一、内存分区模型概述#xff1a;C程序在执行时#xff0c;将内存划分为4个区域程序运行前#xff1a;代码区#xff1a;存放函数体的二进制代码#xff0c;由操作系统管理①共享。共享的目的是对于频繁被执行的程序#xff0c;在内存中只需有一份代码即可②只读。使其只…一、内存分区模型概述C程序在执行时将内存划分为4个区域程序运行前代码区存放函数体的二进制代码由操作系统管理①共享。共享的目的是对于频繁被执行的程序在内存中只需有一份代码即可②只读。使其只读以防止程序意外修改其指令全局区存放全局变量、静态变量及常量①存放全局变量和静态变量②包含常量区字符串常量与其他常量也在其中③该区域的数据在程序结束后由操作系统释放对于这些代码运行后可以发现全局变量和静态变量是在同一个区的而对于常量以及const修饰的变量执行后可以发现常量与const修饰的全局变量都在一个区里即全局区而const修饰的局部变量和局部变量在一个区里程序运行后栈区存放函数的参数值、局部变量等由编译器自由分配释放注意不要返回栈区局部变量的地址例int* func() // 而如果有形参则形参数据也存放在栈区
{int a 500; // 局部变量存放在栈区程序执行完后自动释放return a; // 返回局部变量的地址
}
int main()
{int* p func();cout *p endl; // 当编译器做保留时数据还能打印1次cout *p endl; // 将是乱码非法访问了return 0;
}ps不过经我测试在vs2022中x64平台下栈区数据始终保留无论打印多少次都行而改到x86下只能打印1次第2次开始就是非法访问堆区由程序员自行分配与释放若不进行释放则在程序结束时由操作系统回收在c中主要使用new在堆区开辟内存int* func()
{// new 类型(初识值);返回的是所开辟内存的地址 int* p new int(10);// 而指针p仍在栈上不过其所保留的地址在堆上return p;
}
int main()
{int*p func();cout *p endl;cout *p endl;cout *p endl;cout *p endl;return 0;
}无论执行多少次程序结果总是10意义不同区域存放的数据有不同的生命周期使编程更为灵活new操作符作用在堆区开辟数据返回对应类型的指针对于堆区开辟的数据程序员手动开辟手动释放释放使用操作符deletenew整型数据int* func()
{int* p new int(120);return p;
}
void test1()
{int* p func();cout *p;delete p; // 释放p空间不可再被使用
}new一个数组void test2()
{int* parr new int[10]; //new一个有10个数据的整型数组for (int i 0; i 10; i){parr[i] i 10; // 赋值从10-19}for (int i 0; i 10; i){cout parr[i] endl; // 打印}// 释放堆区数组 - 要加[]delete[] parr;
}释放一个数组的数据要写delete[] arr;delete后加个[]