2.8 操作系统 堆与栈
一、什么是代码段、数据段、bss 段、堆、栈?
代码段:存放程序执行代码的一块内存区域,属于只读。
数据段:用来存放已经初始化且不为 0 的全局变量和静态变量。
bss 段:未初始化或初始化为 0 的全局变量和静态变量。
堆:用来存放进程中被动态分配的内存段。
栈(堆栈):用来存放临时变量、函数调用时的参数、返回值。
二、堆空间为什么不连续?
堆包含一个链表来维护已用和空闲的内存块。堆分配的空间在逻辑地址(虚拟地址)上是连续的,但在物理地址上是不连续的。如果逻辑地址空间上已经没有一段连续且足够大的空间,则分配内存失败。
三、用户栈和内核栈
内核栈:是操作系统的一块区域。用来保存中断现场,以及操作系统程序相互调用的参数、返回值、局部变量等。
用户栈:用户空间的一块区域。用来保存用户程序的局部变量、程序调用参数、返回值等。
四、用户栈和内核栈,为什么不能共用?
为了安全。如果共用一个栈,用户栈的溢出可能会破坏内核栈数据,导致内核崩溃,需要保证内核操作的可靠性。
五、线程是否具有相同的堆栈?
每个线程有自己独立的堆栈。
C++/嵌入式开发 秋招面经 文章被收录于专栏
一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。