请问程序(C语言)的内存是如何分配的,堆是每个程序都共用的吗,而栈是每个程序都有一个吗

请问程序(C语言)的内存是如何分配的,堆是每个程序都共用的吗,而栈是每个程序都有一个吗,第1张

在win32下,堆和栈都是每个程序独立的。

堆的分配的地址是由低到高的,栈的分配的地址是由高往低的。

栈一般是给函数的参数或局部变量使用的

堆一般是动态分配的内存

1、栈区(stack)

由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存.

2、堆区(heap)

一般由程序员分配释放, 若程序员不释放,程序结束时可能由 *** 作系统回收.类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的.一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放.

3、全局区(静态区)(static)

全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放

4、文字常量区

常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区

存放函数体的二进制代码。

以上就是关于请问程序(C语言)的内存是如何分配的,堆是每个程序都共用的吗,而栈是每个程序都有一个吗全部的内容,包括:请问程序(C语言)的内存是如何分配的,堆是每个程序都共用的吗,而栈是每个程序都有一个吗、浅析栈区和堆区内存分配的区别、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10214951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存