免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: toniz

[小机硬件] 请教一个AIX 64位程序内存使用情况的怪异现象 [复制链接]

论坛徽章:
0
发表于 2011-09-05 14:29 |显示全部楼层
回复 10# spook


     恩恩  对的  我的意思就是想说,定义了一个变量,那么系统就会在内存给它预留和对应大小的页面。

     如果只是定义了,而没有使用,那么就会出现:
       7ba5        11 work text data BSS heap           s   2696     0    0  2696
       f9ef8        12 work text data BSS heap           s   2318     0    0  2318

     这种一个段没用完,就使用另外一个段的情况 。

     如果用MEMCPY或者MEMSET使用这部分内存,就发现,其实这里应该是系统预留了已经定义的变量的内存页。内存使用会变成:

      7ba5        11 work text data BSS heap           s   65536     0    0  65536
      f9ef8        12 work text data BSS heap           s   XXXX     0    0  XXXX

     
    问题在于,是不是还有其他可能导致程序在一个堆没用完,就开始去新建其它一个堆的情况。


我使用下面代码测试的,开SVMON 观察,系统内存使用情况的:
编译时xlc_r -o memorytest memorytest.cpp -q64
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string>
  5. #include <vector>
  6. #include <list>
  7. using namespace std;
  8. typedef std::vector<string> VI;
  9. typedef std::list<string> VJ;
  10.        
  11. int main(void)
  12. {
  13.         sleep(20);
  14.                 VI v;
  15.                 v.clear();
  16.                 VJ v1;
  17.                 v1.clear();
  18.                 int i=0;
  19.                 FILE* pf = NULL;
  20.                 char buf[5256];
  21.                 memset(buf,0x00,5256);
  22.                 pf = fopen("/dev/urandom","r");
  23.           if (!pf) {
  24.              printf("open file error! \n");
  25.              return(1);
  26.           }



  27.        
  28.                
  29.                 printf("create memory 2!\n");       
  30.                 char *pch2[5000];
  31.                 for(int i=0;i<5000;++i){
  32.                          pch2[i]=new char[100000];
  33.                          memset(pch2[i],0x00,100000);
  34.                 }
  35. //                for(int i=0;i<5000;++i){
  36. //                         delete [] pch2[i];
  37. //                }
  38.                 sleep(20);
  39.                        


  40.     printf("create memory 1!\n");       
  41.                 while(i<100000){
  42.                         memset(buf,0x00,5256);
  43.                         fgets(buf, 5255, pf);
  44.                         v.push_back(buf);
  45.                         i++;
  46.                 }
  47. //          printf("deleting memory 1!\n");       
  48. //                while(i>0){
  49. //                  v.pop_back();
  50. //                  i--;
  51. //                }
  52.                 sleep(20);


  53.         fclose(pf);



  54.                
  55.   return(0);
  56. }
复制代码

论坛徽章:
0
发表于 2011-09-05 14:37 |显示全部楼层
{:3_190:}

因为我们程序里面是没有这样使用内存的,所以想知道还有没有其它原因导致这种情况。

论坛徽章:
0
发表于 2011-09-06 10:55 |显示全部楼层
有没有可能是这个原因导致的?

http://bbs.chinaunix.net/thread-3591933-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP