什么是“栈”

关于“栈”的解析,查了一些资料,都是这么说的:“栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。”
从这句话中,我的理解是:栈就是由编译器本身进行自动分配和释放的。
我一直很疑惑,代码编译生成可执行文件后,安装在其他设备上运行,哪里来的编译器,编译器不是在程序开发的阶段才要用到的吗?生成了可执行文件,不需要编译器了吧,如果没有有编译器,他怎么能够对“栈”进行自动分配和释放呢?
有点头大……
或许是网上的这个描述让人产出误解。
翻了翻这两本书,对堆栈的描述进行了理解:
1.《深入理解计算机系统》1.7.3虚拟内存
2.《Linux_UNIX系统编程手册》6.3进程内存布局

内容挺多,我总结了一下,应该这么解析:代码在编译阶段,编译器只是指定了栈的生成规则,它告诉操作系统,栈应该怎么分配,在哪里分配,分配多大,编译器并不会生成栈,生成“栈”的这个动作,是程序在被安装所在的机器设备上在运行的时候,由系统完成的。
简单一句话:编译器确定生成栈的规则,由操作系统分配和管理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,213评论 0 2
  • 主要参考:《程序员的自我修养》读书总结编译与链接过程的思考linux 下动态链接实现原理研读《程序员的自我修养—链...
    林大鹏阅读 5,613评论 0 13
  • 真正趣味盎然的是过程,而非事实。真正重要的是圆满的达成,而非圆满本身。
    妞妞米乐阅读 108评论 0 0
  • 序章 有时候会觉得自己是特别的。 是吗? 我想是的! 你看。 宇宙这么大,地球应该是特别的吧。 因为这里有我们这样...
    沉溺的老小孩阅读 243评论 0 2
  • 三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多同学这个问题刚开始回...
    二猪哥阅读 637评论 0 6