内存管理——数据存放位置和野指针

本文介绍了内存管理的各个部分,包括.bss、.data、.rodata、.text、栈和堆段的作用。同时,讨论了内存分配方式,包括静态存储、栈分配和堆分配。此外,重点讲解了野指针的概念及其成因,强调了初始化和正确释放内存的重要性。
摘要由CSDN通过智能技术生成

一、

1、未初始化的全局变量(.bss段)

bss段用来存放那些没有初始化和初始化为0的全局变量

int bass_array[1024 * 1024];
int main(int argc, char* argv[])
{
    return 0;
}

#gcc -g  bss.c -o bss.exe
#ls -l bss.exe
-rwxrwxr-x 1 root root 5975 Nov 16 09:32 bss.exe
#objdump -h bss.exe | grep bss
24 .bss 00400020 080495e0 080495e0 000005e0 2**5
变量bss_array的大小为4MB,而可执行文件大小只有5KB。由此可见,bss类型的全局变量只占运行时的内存空间,而不占用文件空间。

现代大多数操作系统,在加载程序时,会把所有的bss全局变量清0。作为全局变量,在整个程序运行周期内,bss数据段一直存在。


2、初始化过的全局变量(.data段)

data段用来存放那些初始化为非零的全局变量。

int data_array[1024 * 1024] = {1};
int main (int argc, char* argv[])
{
   return 0;
}

#ls -l data.exe
-rwxrwxr-x 1 root root 4200313 Nov 16 09:34 data.exe
#objdump -h data.exe |grep \\.data
23 .data 00400020 080495e0 080495e0 000005e0 2**5
仅仅是把初始化的值改为非0了,文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值