[OS] C++运行时内存分为几个区啊? (自百度知道)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
问题 :
C++运行时内存分为几个区啊?怎么有些人说是分为:堆、栈、自由存储区、全局区、常量区,有些人说是分为:堆、栈、全局区、常量区、代码区呢。
  为什么要这样分啊?是因为程序运行方式的需要呢还是从程序数据安全性和时间效率上分的啊?
回答 :

其实吧,说的简单点是,怎么分,并不重要。
说的复杂点是,其实不分的,例如说,你随便去书店也好,去网上也好,哪怕是看c++之父写的c++ programming language,还是看经典的c++ primer,或者是think in c++这些畅销书,里面有一丁点一丝毫讲你所谓的分区了吗?没有,一点点都没有,为什么不讲?因为我们站在高级语言的角度来看,没必要想这些。
你或者去看80X86的汇编,发现是分段的,或者说分区吧,不过这个只是8086汇编而已,就算是指令集常见的也很多种的,并不是都那么分段、分区的。
再说操作系统,现在一般都是页式内存管理,程序空间都是逻辑空间,物理空间也没什么严格的分区,更何况还这么多。
所以说一个程序如果真的分区,顶多也是从操作系统的角度去看待的。就算是拿单一的操作系统来看,比如说windows吧。简单一些会说,常量在常量区,一定吗?不是吧,比如说局部的常量就在程序栈里面,要说一定会在那吗?其实也不一定,编译器完全可以根据需要把它安排在其他地方,用空间换时间。
我想说的是阿,你没必要思考这些,你要是学过操作系统,学过计算机系统结构,学过汇编(我说的是一般大学的基本专业课),增加点阅历,这些自然就能理解了,现在要全套跟你说这个思路,你也不好理解。
其实最简单的说就是,c++只管自己的东西就行,不用去关心编译器怎么做,不用去关心操作系统怎么分配内存,这也是系统的事,c++只要保证自己正确就好了
追问
可是在设计程序,尤其是设计到效率的时候好像要考虑这些吧,而且听说面试的时候也经常会被问到这些操作系统级别的东西,能不能大致的指点下我啊,很想知道。
回答
不是阿,你从高级语言肯定是没有方法控制编译器和系统的问题,你可以了解一个平台然后尽量去优化,或者干脆去用低级语言。
细化到系统的时候,就算有面试题也是系统的,和高级语言就无关了,例如Unix从系统全局角度就分为程序区,系统区,控制区,这只能说是从系统角度去说。高级语言本身并不控制那么多,这就是分工,各自做好各自的事情,要高级语言能控制那么多,那C语言怎么分区?Objective-C语言怎么分区?Pascal语言怎么分区?Basic语言怎么分区?都是高级语言阿。
我认为,至少能理解高级语言这个层,和其他层是分开的,也是进步。
不要什么都听说啦,网上就能找到很多面试题,你可以找来看看不就更放心吗?百度一下啦~~


【新手】基于C++Qt5通过调用百度翻译API制作简易翻译工具 基于C++Qt5通过调用百度翻译API制作简易翻译工具 目录基于C++Qt5通过调用百度翻译API制作简易翻译工具写在前面步骤:1.注册百度翻译开放平台账号并开通翻译服务2.下载安装Qt5和QtCreator (windows)2.1下载Qt52.2安装Qt5和QtCreator2.3创建项目3.封装生成Url类3.1百度翻译文档阅读3.2编写代码4.使用Qt5制作简易图形化界面5.编写逻辑代码补充:编码转码和一些报错处理总结一下 写在前面 先看看效果图 机缘巧合我发现了百度翻译API,也看了很多大佬用 阅读详情

相关推荐

【C/C++面试必备 | 内存管理】C++中数据存储的位置

一个由 c/c++编译过的程序占用的内存分为一下几个部分:1. 栈:就是那些由编译器在需要的候分配,在不需要的候自动清除的变量的存储。里面的变量通常是局部变量、函数参数等。 2. 堆(动态内存分配):通过new和malloc分配,由delete或free手动释放或者程序结束自动释放。动态内存的生存期人为决定,使用灵活。缺点是容易分配/释放不当容易造成内存泄漏,频繁分配/释放会产生大量内存...

Muti-Agent 7651

内存详解

内存的分模型 内存共划分为4个域: 1.代码:存放函数体的二进制代码,由操作系统进行管理。 2.全局:存放全局变量和静态变量以及常量。 3.栈:由编译器自动分配释放,存放函数d的参数值,局部变量等。 4.堆:由程序员分配和释放,若程序员不释放,程序结束由系统回收。 程序运行前 在程序编译后,生成了exe可执行文件,未执行程序前内存分为两个域 代码: 代码是共享的,对于被频繁执行的程序,只需要在内存中有一份代码即可。 代码是只读的,防止意外修改代...

m0_59738220的博客 6779

内存的分

深度剖解内存的分

陈某的博客 4029

内存(代码、全局、堆、栈

C++在程序执行的候,内存分为4个域 ·代码:存放函数体的二进制代码,由操作系统进行管理的。 ·全局:存放全局变量和静态变量以及常量 ·栈:由编译器自动分配释放,存放函数的参数值,局部变量等。 ·堆:由程序员分配和释放,若程序员不释放,程序结束后由操作系统回收。 一、代码 ①代码存放CPU执行的机器指令既程序汇编而成的二进制代码。 ②代码是共享的,对于频繁执行的程序,内存中只需要保存一份即可。 ③代码是只读的,只读的原...

qq_42174306的博客 1万+

C++的IO库简介

和文件有关系的输入输出类主要在fstream.h这个头文件中被定义,在这个头文件中主要被定义了三个类,由这三个类控制对文件的各种输入输出操作,他们分别是ifstream、ofstream、fstream,其中fstream类是由iostream类派生而来,他们之间的继承关系见下图

Cobing Liu 2807

c++内存到底分几个?!

 一个由c/C++编译的程序占用的内存分为以下几个部分 (大致有3种说法) 一:1、栈(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  2、堆(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。  3、全局

MagicxiaoZ的专栏 4329

C/C++语言的内存(栈,堆,全局,代码)(附图详解)

在执行一个C/C++语言程序,此程序将拥有唯一的“内存”——栈、堆、全局、代码。每个程序都有唯一的四个内存域,我们需要熟悉和了解各个域的特性,例如存储什么类型的数据, 有谁去申请开辟,,又有谁去管理释放。 流程说明: 1、操作系统把物理硬盘代码load到内存 2、操作系统把c代码分成四个 3、操作系统找到main函数入口执行 静态,代码,堆,栈 存储地址依次下降 ...

qq_38769551的博客 1万+

vs使用未初始化的内存怎么解决_C/C++教程,详解C/C++中的内存

1 代码存放 CPU 执行的机器指令。通常代码是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码还规划了局部变量的相关信息。总结:你所写的所有代码都会放入到代码中,代码的特点是共享和只读。2 全局全局中主要存放的数据有:全局变量、静态变量、常量(如...

weixin_39940714的博客 4258

C++中栈 常量(由一道面试题目而学习)

 原文出自:http://baike.baidu.com/view/536145.htmC++中栈 常量(由一道面试题目而学习)2009-04-28 21:01#includevoid main(){char a[]="abc";栈 char b[]="abc";栈 char* c="abc";abc在常量,c在栈上。char* d="abc"; 编

清风的专栏 2910

第1天 C语言Dev-Cpp环境搭建及使用、C语言内存

Dev-Cpp 新手建议使用这个编译器,Windows10平台下用电脑管家等软件管理的软件市场就可以下载,同样也推荐直接百度编译器名字去官网下载。 1、安装注意安装路径,下面图片中高亮文件是编译器开始程序,可以以快捷方式发到桌面上方便启动。 2、新建项目 3、选择项目类型并命名,注意选择C项目和Console Application控制台 4、设置自己创建的文件保存路径 5、编辑代码,下面代码为编辑器自动生成 6、在选项栏找到“编译“”按钮或使用快捷键F9,编译 7、在选项栏找到“运行”按钮或使

qq_42629529的博客 3920

程序闪退怎么运行_程序是怎么在电脑中运行的?(python、C内存分配)

相信了解电脑的朋友们都知道,普通的家用计算机都是由CPU、硬盘、内存、主板等硬件构成的,其他的配件如鼠标啥的基本上买电脑的候都配齐了。当然条件好的朋友也可能会加个GPU玩游戏啥的,计算机专业的同学还需要用GPU来跑数据集......这些都是计算机的硬件部分,那么在软件层面,比如说QQ,浏览器这些常用的软件在计算机中是怎么运行的呢,为什么当打开的软件很多的候计算机会出现卡顿的情况。当问...

weixin_39713833的博客 94

c++ 内存构成

C++内存分成5个,分别是堆、栈、全局/静态存储、常量存储和代码。 栈:就是那些由编译器在需要的候分配,通常是局部变量、函数参数等。 堆:一般是new delete 和 malloc free。 全局/静态存储:全局变量和静态变量被分配到同一块内存中。 常量存储:里面存放的是常量,不允许修改。 代码 。 其中:new/delete是C++关键字,调用构造、析构函...

baidu_16370559的博客 882

C++中栈 常量

原文出自:http://baike.baidu.com/view/536145.htm C++中栈 常量(由一道面试题目而学习) 2009-04-28 21:01 #include void main() { char a[]="abc";栈  char b[]="abc";栈  char* c="abc";abc在常量,c在栈上

qiu265843468的专栏 934

C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案

一、【阿里C++面试题】 1、如何初始化一个指针数组。 答案: 错题解析:首先明确一个概念,就是指向数组的指针,和存放指针的数组。 指向数组的指针:char (*array)[5];含义是一个指向存放5个字符的数组的指针。 存放指针的数组:char *array[5];含义是一个数组中存放了5个指向字符型数据的指针。 按照题意,我理解为初始化一个存放指针的数组,char *array[2]={“China”,”Beijing”};其含义是初始化了一个有两个指向字符型数据的指针的数组,这两个指针分别指向字符串

天天的博客 1万+

c++ 常量

C++中栈 常量(由一道面试题目而学习) 2009-04-28 21:01   #include void main() { char a[]="abc";栈  char b[]="abc";栈  char* c="abc";abc在常量,c在栈上。 char* d="abc"; 编译器可能会将它与c所指向的"abc"优化成一个地方

boshuzhang的专栏 640
上一篇: [汇编] EAX、ECX、EDX、EBX寄存器的作用
下一篇: [面试] 找工作要注意的C++方面的问题!
小尼人00
博客等级 码龄14年 77粉丝 515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值