| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 212 人关注过本帖
标题:内存分配的问题
收藏  订阅  推荐  打印 
mark0289
Rank: 2
等级:注册会员
帖子:81
积分:970
注册:2006-4-5
内存分配的问题

在系统中,能够声明的静态数组最大长度是多少,使用动态内存分配,最大能够获取多大的内存块

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

请指点下
搜索更多相关主题的帖子: 内存  
2008-8-29 09:41
qfyzy
Rank: 3Rank: 3
来自:安徽合肥
等级:中级会员
威望:1
帖子:344
积分:3728
注册:2008-2-17

回答这个简直就像回答随机数一样麻烦。。。
不过我做了个程序实验下;
发现XP里分配的多是虚拟内存。最大长度就难说了,10W的char数组我也用过

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-8-29 09:58
hoodlum1980
Rank: 3Rank: 3
来自:浙江大学
等级:中级会员
帖子:248
积分:3296
注册:2008-2-24

看你是在哪声明的,用什么方式申请的。程序有全局变量放在静态区,其他是属于进程的动态分配的堆,和属于线程的独立栈。临时变量从栈上分配。用malloc类似的函数则是从堆上分配,需要手工释放。16位系统下的直接申请可能要受限于64K。WIN32下有4G逻辑内存空间。
2008-8-29 11:51
mark0289
Rank: 2
等级:注册会员
帖子:81
积分:970
注册:2006-4-5

太谢谢楼上两位了!

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

还有就是系统分配给我们的都是虚拟内存地址,具体对应的物理地址在哪儿,应该比较难确定了!
2008-8-29 14:18
hoodlum1980
Rank: 3Rank: 3
来自:浙江大学
等级:中级会员
帖子:248
积分:3296
注册:2008-2-24

栈上数据通常能够自动释放。还有就是进程结束后系统会回收该进程的所有内存,但该进程的句柄表(系统内核数据)可能依然存活。

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

在NT架构里,系统为进程做了隔离,但是通常系统会要求你仅使用一半逻辑内存,另一半留给操作系统。
2008-8-29 14:28
mark0289
Rank: 2
等级:注册会员
帖子:81
积分:970
注册:2006-4-5

谢谢楼上指点,说得很清楚
2008-8-30 14:54
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.060096 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved