C++程序内存分配详解

本文详细介绍了C++程序在内存中的结构,包括硬盘中的程序结构和内存中的进程结构。重点讨论了堆和栈的区别,如申请方式、系统响应、大小限制、效率和存储内容。强调栈由系统自动分配,速度较快,而堆使用new分配,更灵活但速度较慢。此外,文章还提到了堆和栈的存取效率差异。
摘要由CSDN通过智能技术生成

1. 硬盘中的结构——程序

首先在Linux下查看一下test文件的信息:

[root@localhost Ctest]# file test //此文件基本情况
test: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
[root@localhost Ctest]# size test //此二进制可执行文件结构情况

text data bss dec hex filename
906 284 4 1194 4aa test

//代码区静态数据/全局初始化数据区 未初始化数据区 十进制总和 十六进制总和 文件名

此可执行程序在存储时(没有调入到内存)分为代码区(text)、数据区(data)和未初始化数据区(bss)3个部分

2. 内存中的结构——进程

在Linux系统中代码段总是从0x08048000处开始,数据段在接下来的4KB对齐的地址处,运行时堆在接下来的读写段之后的第一个4KB对齐的地址处,并通过调用malloc库网上增长,开始于地址0x40000000处的段是为共享库保留的,用户栈总是从地址0xbfffffff处开始,并向下增长,从栈的上部开始于地址0xc0000000处的段是为操作系统驻留存储器部分的代码和数据保留的。

程序调入内存(执行时),其结构如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值