2 qq 33892372 qq_33892372 于 2016.01.30 17:48 提问

关于c语言malloc的用法。。

c语言的malloc语句中动态获取的最大空间和电脑的什么有关?
c语言的malloc语句中动态获取的最大空间和电脑的什么有关?

6个回答

caozhy
caozhy   Ds   Rxr 2016.01.31 07:58
已采纳

首先,计算机的物理内存、计算机的寻址能力、计算机的地址空间、malloc申请的值、操作系统进程的地址空间几个概念都是不同的。

计算机的寻址能力是字长决定的,一台32位的电脑,寻址能力是4GB,注意,这些地址中还有dma bios io等等的保留地址,它留给内存的地址空间大约是3.5GB左右(具体计算机不同)
计算机的寻址能力决定了计算机物理上能访问的最大内存空间。但是物理内存可能比它大,也可能比它小。你买计算机,会知道内存的大小,2GB 4GB 8GB等等。
计算机为每个进程划分了独立的虚拟地址空间。对于windows(32bit)来说,2GB以下是用户空间,2GB以上是系统空间。这就决定了一个32bit的进程,只能访问2GB的内存,是不是正好2GB呢?不是,因为堆栈、静态区等等也占用了一些地址,而且堆上的地址也不是连续的,如果碎片很多,会出现有空间没法分配的情况。
如果你的计算机只安装了1GB的内存,是不是只能访问1GB(或者更少)呢?也不是,因为操作系统会使用页面文件(俗称虚拟内存,此虚拟内存不是虚拟地址空间,而是指拿磁盘作为页面交换空间模拟出来的内存)。
那么malloc分配了一个很大的空间,是不是一定就报内存溢出/内存不足的错误呢?也不是,因为操作系统分配内存是按照懒惰分配的原则。也就是如果你没有实际访问这些内存,那么光分配,这些虚拟内存地址被分配出去了,但是并没有使用实际的内存,也就是没有分配页。所以malloc能分配的内存比实际上没有使用的物理内存还要大。

lm_whales
lm_whales   Rxr 2016.01.31 16:02

现代操作系统,用户可用内存都是虚拟内存,和物理内存实际大小关系不大了
但是内存多少,和电脑可以开多少进程,和大数据量程序的效率,关系依然不小
物理内存小了,页面就要频繁交换,对大数据量的程序(并且如果有很多进程再跑)来说,容易产生内存抖动。
虚拟内存,主要问题是CPU和操作系统,
给你提供多大的地址空间可用,其中某些空间。也不是应用程序可以使用的
操作系统,硬件要占用一部分内存空间。其余的才是可用内存空间。
可用内存空间,刨去应用程序的静态空间,代码空间,堆栈空间
以及其他必须占用的内存空间。才是可以动态分配的堆空间。
32Bits Windows 很难用到2G以上的内存,
采用某些手段最高可用3G内存,但是未必一定是实际物理内存。
当然,如果物理内存有4G的话
程序运行在物理内存中的概率还是蛮大的
64Bits应该就没4G内存的限制了

lm_whales
lm_whales malloc 本质上是C,C++ 库函数,和操作系统关系不大,最多调用API实现它
接近 2 年之前 回复
qw2384008
qw2384008   2016.01.31 16:20

.版本 2

.子程序 CALL_拾取
.参数 对象地址, 整数型
.参数 物品地址, 整数型, , 地址段
.局部变量 物品EBP, 整数型
.局部变量 拾取EBP, 整数型

物品EBP = 十六到十3 (#物品栏)
拾取EBP = 十六到十3 (#拾取CALL)
置入代码 ({ 96, 139, 181, 8, 0, 0, 0, 139, 54, 139, 141, 252, 255, 255, 255, 139, 12, 49, 255, 181, 12, 0, 0, 0, 139, 133, 248, 255, 255, 255, 255, 208, 97 })

fk002008
fk002008   2016.01.31 01:33

c语言的malloc语句中动态获取的最大空间和电脑的什么有关?

肯定和电脑的内存和cpu有关了。

内存限制着理论上的存储空间界限
cpu的可以处理的字长也是,处理的字长越大,指令本身的体积越大,占用内存也大

另外就是你的c程序在跑的时候,其实是分配给你一个进程空间的。
这个进程空间内资源限定好了。
你使用malloc分配的内存空间应该不能逃脱这个进程的内存空间的。

如果你分配越多,那么应该是进程的资源占用较多。

所以这个和操作系统的类型还有关系,到底可以给进程多大的空间。

cnzjp9
cnzjp9   2016.01.31 15:09

malloc的最大申请空间和操作系统对进程设置的堆空间大小有关,和物理内存没有关系。

91program
91program   Ds   Rxr 2016.01.30 21:17

当然有关系,至少电脑提供的可用内存要大于 malloc 申请的内存大小。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!