| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1195 人关注过本帖
标题:内存分配的问题
只看楼主 加入收藏
mark0289
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-4-5
收藏
 问题点数:0 回复次数:5 
内存分配的问题
在系统中,能够声明的静态数组最大长度是多少,使用动态内存分配,最大能够获取多大的内存块

我们在C语言程序中申请的内存来自系统的什么部分,RAM还是系统的虚拟内存,加入一台电脑的内存为1G,静态数组最大长度能是多少,和什么因素有关呢?

请指点下
搜索更多相关主题的帖子: 内存 
2008-08-29 09:41
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
回答这个简直就像回答随机数一样麻烦。。。
不过我做了个程序实验下;
发现XP里分配的多是虚拟内存。最大长度就难说了,10W的char数组我也用过

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-08-29 09:58
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
看你是在哪声明的,用什么方式申请的。程序有全局变量放在静态区,其他是属于进程的动态分配的堆,和属于线程的独立栈。临时变量从栈上分配。用malloc类似的函数则是从堆上分配,需要手工释放。16位系统下的直接申请可能要受限于64K。WIN32下有4G逻辑内存空间。
2008-08-29 11:51
mark0289
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-4-5
收藏
得分:0 
太谢谢楼上两位了!

如果从操作系统的角度出发,现在我用的是XP,如果在一个任务中,就算将全部空间都申请为静态数组,最大是4G,但是这应该是不可能的

还有就是系统分配给我们的都是虚拟内存地址,具体对应的物理地址在哪儿,应该比较难确定了!
2008-08-29 14:18
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
栈上数据通常能够自动释放。还有就是进程结束后系统会回收该进程的所有内存,但该进程的句柄表(系统内核数据)可能依然存活。

另一点是进程启动时,被系统加载到内存中,在进程内的逻辑地址映射到物理地址,但是这个映射是由操作系统来维护的。而且操作系统会在特定时间里整理内存以腾出更大的连续空间。因此同一个逻辑地址,但物理地址可能是不稳定的。这也是windows提供稳定的handle的原因之一。因此你会发现有些API函数的名称叫做lock内存,这表示你正处在修改这块内存数据的过程中,不希望操作系统移动这块内存数据。

在NT架构里,系统为进程做了隔离,但是通常系统会要求你仅使用一半逻辑内存,另一半留给操作系统。
2008-08-29 14:28
mark0289
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2006-4-5
收藏
得分:0 
谢谢楼上指点,说得很清楚
2008-08-30 14:54
快速回复:内存分配的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033251 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved