在win32下,堆和栈都是每个程序独立的。
堆的分配的地址是由低到高的,栈的分配的地址是由高往低的。
栈一般是给函数的参数或局部变量使用的
堆一般是动态分配的内存块
1、栈区(stack)
由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存.
2、堆区(heap)
一般由程序员分配释放, 若程序员不释放,程序结束时可能由 *** 作系统回收.类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的.一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放.
3、全局区(静态区)(static)
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放
4、文字常量区
常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区
存放函数体的二进制代码。
以上就是关于请问程序(C语言)的内存是如何分配的,堆是每个程序都共用的吗,而栈是每个程序都有一个吗全部的内容,包括:请问程序(C语言)的内存是如何分配的,堆是每个程序都共用的吗,而栈是每个程序都有一个吗、浅析栈区和堆区内存分配的区别、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)