2.8 操作系统 堆与栈

一、什么是代码段、数据段、bss 段、堆、栈?

代码段:存放程序执行代码的一块内存区域,属于只读

数据段:用来存放已经初始化且不为 0 的全局变量和静态变量。

bss 段:未初始化或初始化为 0 的全局变量和静态变量。

堆:用来存放进程中被动态分配的内存段。

栈(堆栈):用来存放临时变量、函数调用时的参数、返回值。

二、堆空间为什么不连续?

堆包含一个链表来维护已用和空闲的内存块。堆分配的空间在逻辑地址(虚拟地址)上是连续的,但在物理地址上是不连续的。如果逻辑地址空间上已经没有一段连续且足够大的空间,则分配内存失败。

三、用户栈和内核栈

内核栈:是操作系统的一块区域。用来保存中断现场,以及操作系统程序相互调用的参数、返回值、局部变量等。

用户栈:用户空间的一块区域。用来保存用户程序的局部变量、程序调用参数、返回值等。

四、用户栈和内核栈,为什么不能共用?

为了安全。如果共用一个栈,用户栈的溢出可能会破坏内核栈数据,导致内核崩溃,需要保证内核操作的可靠性。

五、线程是否具有相同的堆栈?

每个线程有自己独立的堆栈。

C++/嵌入式开发 秋招面经 文章被收录于专栏

一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

全部评论

相关推荐

肖先生~:大一点得到公司面试更能学到点东西
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务