内存 VSS,RSS 小实验

2022-03-02  本文已影响0人  丁鸿辉

测试代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char**argv)
{
        char mode = 'm';
        size_t size = 1024;
        size_t c_size = 0, v_size = 0;
        char * p = NULL;
        int ret;

        while(1) {
                ret = scanf("%c %ld", &mode, &size);
                if(ret != 2) continue;
                printf("action: mode: %c and size: %ld\n", mode, size);
                p = malloc(size*1024*1024);
                if(p == NULL) {
                        perror("malloc failed");
                        continue;
                }
                v_size += size;
                if(mode == 'c') {
                        p = memset(p, 0, size*1024*1024);
                        if(p == NULL) {
                                perror("memset failed\n");
                                continue;
                        }
                        c_size += size;
                }
                printf("rss: %ld v_size: %ld\n", c_size, v_size);
        }
        return 0;
}

测试结论

  1. 单个进程的虚拟地址空间可以超过物理内存和swap的总和。
  2. malloc 但是未初始化的内存仅占用地址空间,memset 后占用 RSS。
上一篇下一篇

猜你喜欢

热点阅读