[实践OK]c语言,malloc分配内存给数组指针并填充内存,給内存赋值实现OOM测试。引入了动态链接库在RSS,VSZ上的一个系统不一致研究并用pmap -x pid查看。

jackxiang 2007-12-29 10:06 | |
二维数组可以看作是由两个一维数组(一个指针数组,一个基本型别的数组)嵌套而成;  
二维数组可以看作是由两个一维数组(一个指针数组,一个基本型别的数组)嵌套而成;  
比如a[10][10];  
其中a是一个数组,他的每个元素(a[i])(0<=i<10)又是一个数组,如a[i]就是一个数组,它的每个元素为a[i][j](0<=j<10);  
其实2维数组中*a就是表示a[0];  

    实际上在内存中只存在一维数组,它只是在语言这一层次上用二维的方式呈现给语言的使用者。  
  其实二维数组和一维数组差不多,  
  一维数组中a[i]与*等同,都指的是值;  
  二维数组中a[i][j]可分为两部分,a[i]代表指向第i行的指针,也就是第i行的首地址;  
  a[i][j]代表第i行的第j个元素
#include <stdio.h>
int main()
{
        int i;
        float a[9]={0,1,2,3,4,5,6,7,8};
        float *p=(float*)malloc(9*sizeof(float));

        for(i=0;i<9;i++)
        {
        scanf("%f",p+i);
        }


        for(i=0;i<9;i++)
        {
        printf("p==%f\n",*(p+i));
        }



}



动态分配内存并填充里面的内容:
[codes=php]
#include <stdlib.h>
#include <stdio.h>
int main()
{
       int i,j;
       int *p[300];
       printf("len of int=%d\n",sizeof(int));
       for(i=0;i<300;i++){
          p[i]=(int *)malloc(262013*sizeof(int));
          for(j=0;j<262013;j++){
             *(p[i]+j)=1;
             //sleep(1);
             //printf("p=%d\n",*(p[i]+j));
          }
          //sleep(0.1);
       }

       printf("End...\n");
       while(1){
         sleep(1);
       }
}
[/codes]

make malloc
cc     malloc.c   -o malloc

./malloc

watch -n 2 ps -opid,ppid,rss,vsz,cmd -C malloc                                                                                                          Mon Sep  2 17:17:11 2019

  PID  PPID   RSS    VSZ CMD
  880 30676 45888  49320 ./malloc
经查实核对,上面的RSS是kb,想要看到M,则要45888/1024=44M ,
244667 ==>280M
61166 ==> 70M
42816 ==> 49.57M     (共享内存SO动态链接库占用)为何是50M,是300个数组指针,42816*4*300/1024=50.175
256896 ==>294M
262013 ==>300.42M   (主进程)


引入了动态链接库在RSS,VSZ上的一个系统不一致研究并查看前的动态链接库的编译基础原理链接,
[实践OK]Linux如何解决动态库的版本控制, Linux如何解决动态库的版本控制,C语言HelloWorld示例,readelf -d libhello.so.0.0.0 |grep SONAME。
[url=https://jackxiang.com/post/7717/]https://jackxiang.com/post/7717/[/url]





整型点几个字节的问题决定上面能使用多少M的内存:
[codes=php]
#include<stdio.h>
   main()
  {
     char a;
     char* b;
     short int c;
     int d;
     unsigned int e;
     float f;
    double g;
    long h;
    long long i;
    unsigned long j;

    printf("char a=%d\n",(int)sizeof(a));
    printf("char*b=%d\n",(int)sizeof(b));
    printf("short int c=%d\n",(int)sizeof(c));
    printf("int d=%d\n",(int)sizeof(d));
    printf("unsigned int e=%d\n",(int)sizeof(e));
    printf("float f=%d\n",(int)sizeof(f));
    printf("double g=%d\n",(int)sizeof(g));
    printf("long h=%d\n",(int)sizeof(h));
    printf("long long i=%d\n",(int)sizeof(i));
    printf("unsiged long j=%d\n",(int)sizeof(j));
  }

[/codes]

make int
./int
char a=1
char*b=8
short int c=2
int d=4
unsigned int e=4
float f=4
double g=8
long h=8
long long i=8
unsiged long j=8


来自:https://www.cnblogs.com/TGSB/p/4824246.html


[url=https://www.wntool.com/filesize/]https://www.wntool.com/filesize/[/url]里得出:
整型变量中,上面得出的1个整型有4个字节(byte),也就是4个byte的类型据上面查出有( 8 )位bit。
1M=1048576个Byte,1048576/4=262144是小B,得乘以8=8388608 .


dmesg | grep oom
[   91.458107] stress-ng (10288): /proc/10288/oom_adj is deprecated, please use /proc/10288/oom_score_adj instead.

dmesg | less -I



用pmap -x pid查看:
pidof main
1589

pmap -x 1589

pmap -x 1589
1589:   ./main
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000       4       4       0 r-x-- main
0000000000600000       4       4       4 r---- main
0000000000601000       4       4       4 rw--- main
00007f79c04da000  355752  355752  355752 rw---   [ anon ]
00007f79d6044000    1804     276       0 r-x-- libc-2.17.so
00007f79d6207000    2044       0       0 ----- libc-2.17.so
00007f79d6406000      16      16      16 r---- libc-2.17.so
00007f79d640a000       8       8       8 rw--- libc-2.17.so
00007f79d640c000      20      12      12 rw---   [ anon ]
00007f79d6411000       4       4       0 r-x-- libhello.so.0.0.0
00007f79d6412000    2044       0       0 ----- libhello.so.0.0.0
00007f79d6611000       4       4       4 r---- libhello.so.0.0.0
00007f79d6612000       4       4       4 rw--- libhello.so.0.0.0
00007f79d6613000     136     108       0 r-x-- ld-2.17.so
00007f79d6658000    1860    1860    1860 rw---   [ anon ]
00007f79d6832000       8       8       8 rw---   [ anon ]
00007f79d6834000       4       4       4 r---- ld-2.17.so
00007f79d6835000       4       4       4 rw--- ld-2.17.so
00007f79d6836000       4       4       4 rw---   [ anon ]
00007fff427ad000    1156      12      12 rw---   [ stack ]
00007fff429e3000       8       4       0 r-x--   [ anon ]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB          364896  358092  357696







作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/842/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2019-9-3 15:38
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]