免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3059 | 回复: 9
打印 上一主题 下一主题

[C] 一个程序一般可以申请的内存是多少 [复制链接]

论坛徽章:
4
亥猪
日期:2013-09-27 13:50:29酉鸡
日期:2013-10-09 13:08:59丑牛
日期:2013-10-20 11:16:47亥猪
日期:2013-10-26 11:50:59
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-26 20:49 |只看该作者 |倒序浏览
rt
1, 一次 malloc(max_size)  max_size最大是多少?
2,多次malloc() , 一共最大能获得多少
    int n=0;
    while(1) {
      void* data = malloc(12;
      if(data) {n++;}
      else {  printf("max size:%d\n", n*12; }
      sleep(1);
   }
大概就这意思, 在虚拟机里面 跑了一会,好像没啥反应,不知道是哪里有问题,求高人指点~ orz

论坛徽章:
0
2 [报告]
发表于 2013-09-26 22:04 |只看该作者
小于3个G吧!

论坛徽章:
1
丑牛
日期:2013-09-29 19:04:50
3 [报告]
发表于 2013-09-26 22:06 |只看该作者
本帖最后由 solu 于 2013-09-26 22:07 编辑

上次压力测试用服务器申请了120个G

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
4 [报告]
发表于 2013-09-26 22:41 |只看该作者
回复 3# solu


    申请120G没用, 申请到的其实不是物理内存, 内存的压力测试很不好做的,你申请以后最少要保证不断往页面中写入最少一个页面一个字节数据(一个字比较好, 理论上应该会比较快)。

论坛徽章:
1
丑牛
日期:2013-09-29 19:04:50
5 [报告]
发表于 2013-09-26 23:44 |只看该作者
folklore 发表于 2013-09-26 22:41
回复 3# solu



这个预申请的内存, 在后面运行的阶段是一直不断的读写的。

论坛徽章:
0
6 [报告]
发表于 2013-09-27 11:19 |只看该作者
swap的大小+实际可用的内存空间

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
7 [报告]
发表于 2013-09-27 11:25 |只看该作者
回复 1# AssassinPig


    malloc的参数是size_t类型,从接品上来看可以很大,size_t随平台的不同而不同,64位系统上是它是64位,32位系统上它是32位,最大值为SIZE_MAX。
 从库实现的角度来讲如glibc或msvcr等都有自己内存分配策略而且不同系统和硬件平台都有许多不同的细节,所以从库的角度来看既依赖于不同版本的库实现也依赖于系统平台的异差。
 从操作系统角度上来讲,malloc本质上还是调用操作系统接口来申请内存linux上是mmap(mmap2),windows是heapalloc。基本上可以说这些系统接口确定了malloc的行为。基于上这个接口申请的只是虚拟内存,由于系统几乎都是根据缺页异常来进行真正的虚拟内存到物理内存的映射所以如果申请了内存而没有对内存进行读写的话,那么实际上没有真正的占用内存,只是占用了虚拟地址。
 根据库,操作系统,当前物理内存使用情况等场景的不同最大可使用的内存是不一样的。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
8 [报告]
发表于 2013-09-27 11:38 |只看该作者
SYNOPSIS
       #include <stdlib.h>

       void *malloc(size_t size);

与size_t相关.

论坛徽章:
4
亥猪
日期:2013-09-27 13:50:29酉鸡
日期:2013-10-09 13:08:59丑牛
日期:2013-10-20 11:16:47亥猪
日期:2013-10-26 11:50:59
9 [报告]
发表于 2013-09-27 13:31 |只看该作者
今天放到真机上一试,测试了下 能申请个1G,  应该是个默认值, 4G的内存大小 linux 64位, window上16g内存 64系统 一样情况, 昨日虚拟机中情况不能参考了。
test code:
size_t data_size = 1;
void* data = NULL;
while(1) {
     data = malloc(data_size);
     if(data) {
         data_size*=2;
         free(data);
         printf("malloc succ data_size:%d", data_size);
     } else {
         // malloc(data_size/2);
         //sleep(1000000000);
         //free(data);
         break;
     }
}

论坛徽章:
4
亥猪
日期:2013-09-27 13:50:29酉鸡
日期:2013-10-09 13:08:59丑牛
日期:2013-10-20 11:16:47亥猪
日期:2013-10-26 11:50:59
10 [报告]
发表于 2013-09-27 13:34 |只看该作者
另外再挖了个贴, 又感觉清爽了点
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4084048
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP