堆栈-操作系统(二)

本文探讨了操作系统中堆栈、代码段、BSS段和数据段的作用,特别是未初始化和已初始化全局变量的存储位置。在创建链表时,通过`new`操作符分配的节点位于堆区,而指针变量通常存储在栈区。文章提出问题:链表是否能存储在栈区,并解释了不使用`new`在栈中创建链表的局限性。
摘要由CSDN通过智能技术生成

接上文。

这篇文章没有涉及到最根本的原理,只是浅谈。毕竟只是记问之学,没有深入研究过,做此章供大家参考。


上文我们提到了栈和堆存放不同类型的变量,但是有部分问题仍未解决。这篇文章将简说内存分配的其他空间。

代码段:存放代码的空间,这里的代码指的是二进制代码。比如你写了一个hello world的程序,总得有一个地方存放这段程序,而普通c语言代码存放在磁盘中,可是经过编译链接后的代码存放在哪?就是这个代码段中。而代码段中的数据只可读不可写。

BSS(Block Started by Symbol): 用于存放程序中未初始化的全局变量和静态变量的一块内存区域。可读可写。而未初始化的全局变量在编译前会被编译器自动置零。

数据段: 已初始化的全局变量和静态变量存于其中,属于静态内存分配。

所以,上文的变量中:

#include<iostream>
using namespace std;
 
int a;              //未初始化的全局变量,存于BSS
int b = 0;          //已初始化的全局变量,存于数据段
 
int main(){
    static int c;   //未初始化的静态变量,存于BSS
    static int d = 1;//已初始化的静态变量,存于数据段
    const int e = 2; //局部const依然存储在
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值