C/C++编译的程序内存分配有五个区域
描述 | 生存周期 | 举例 | |
---|---|---|---|
堆 | 由程序员主动分配与释放 | new-delete malloc-free | char * p1 = (char*) malloc(10) 注意p1指针本身是在栈中的 |
栈 | 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等 | 函数中-函数执行网,类-类销毁时 | int fun(int a){int b = 2;a = 3 ;return a*b;} |
全局区(静态区) | 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域 | 程序结束后由系统释放 | static int a = 1; |
常量区 | 常量字符串就是放在这里的 | 程序结束后由系统释放 | char* p1 = “asdsafasd” |
代码块 | 程序代码区—存放函数体的二进制代码 | 程序结束后由系统释放 |
堆和栈的区别:
栈(栈是先进后出的队列)由系统自动分配,速度较快。但程序员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片
题目一:同一个进程的不同线程,以下不能被共享的是? ( )
正确答案: C 你的答案: B (错误)
全局变量
堆
栈
文件句柄
题目二:将递归算法转换为非递归算法, 通常需要使用( )
正确答案: A 你的答案: C (错误)
栈
队列
线性表
广义表
解析:此处利用率栈的先进后出,和递归法流程一致