程序内存的分配
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束后有系统释放 文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 程序代码区—存放函数体的二进制代码。
例子程序
堆和栈的理论知识
1 申请方式
p1 = (char *)malloc(10);
p2 = (char *)malloc(10);
2 申请后系统的响应
3 申请大小的限制
4 申请效率的比较:
5 堆和栈中的存储内容
6 存取效率的比较
#include
void main() {
char a = 1;
char c[] = "1234567890";
char *p ="1234567890";
a = c[1];
a = p[1];
return;
}
10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01 mov al,byte ptr [edx+1]
00401073 88 45 FC mov byte ptr [ebp-4],al
7 小结
原文:https://blog.csdn.net/yingms/article/details/53188974