2.堆.栈和内存映射详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.堆.栈和内存映射详解相关的知识,希望对你有一定的参考价值。

1.每个线程都有自己专属的栈(stack),先进后出(LIFO)

2.栈的最大尺寸固定,超出则引起栈溢出

3.变量离开作用范围后,栈上的数据会自动释放

4.堆上内存必须手动释放(C/C++)除非语言执行环境支持GC

5.栈还是堆?

--明确知道数据占用多少内存

--数据很小

--大量内存

--不确定需要多少内存

技术分享图片

 

 


 

 举个例子

技术分享图片

值得注意的是list_buf这个指针变量是在栈区,二list_buf这个指针指向的内存在堆区,还有函数的参数也是在栈区,而且是从右往左入栈

详细过程如下,值得注意的是,函数的参数如果是引用传递,先在栈区创建一个变量,占四个自己,但指向了一个堆区的内存.

 技术分享图片

静态区的值是一直不动的,而栈区的值是不断变化的.

 下面我们在linux下演示一下:

 

以上是关于2.堆.栈和内存映射详解的主要内容,如果未能解决你的问题,请参考以下文章

win32day13-地址空间/地址映射/虚拟内存/堆内存/内存映射文件

win32day13-地址空间/地址映射/虚拟内存/堆内存/内存映射文件

linux源码解析13- 反向映射RAMP详解

mmap()共享内存详解

堆栈内存映射

JavaScript栈和堆内存,作用域