day_04_内存管理

来源:互联网 发布:ubuntu查看64位 32位 编辑:程序博客网 时间:2024/06/11 23:42

    • 一内存管理
      • 1关于进程的内存空间划分
        • 1 问题进程和程序的区别
        • 2进程在内存中的布局
        • 3 产生段错误的原因
        • 4 getpid返回调用者所在进程的ID

一、内存管理

1、关于进程的内存空间划分

1.1 问题:进程和程序的区别?

  1)程序是保存在磁盘上的可执行文件;
  2)运行程序时,需要将可执行文件加载到内存形成了进程;
  3)一个程序可以同时对应多个进程;

1.2进程在内存中的布局

  代 码 段:(code)[代码、const全局变量、字符串字面常量] .可读非写,非法写入会导致段错误;
  数 据 段:初始化的全局变量(data)static修饰的变量(如:静态变量)可读可写
  B S S 段`:未初始化的全局变量 可读可写
  堆 区:malloc申请的空间(heap)[由低地址向高地址]
  栈 区:局部变量 函数参数(stack)[由高地址向低地址] 可读可写

注意:
关于函数的名称和数组的名称属于字面常量,本身不占内存空间

1.3 产生段错误的原因:

  1)对内存区域进行没有权限的操作,比如修改只读区;
  2)访问未映射的虚拟地址内存空间;

char *p = NULL;*p = ‘a’;

练习:关于字符串的操作
  三种形式:字面值“abcdef”
  字符指针char *str1
  字符数值char str2[]

1.4 getpid():返回调用者所在进程的ID

  当一个进程执行期间,会在操作系统/proc目录自动产生一个以对应进程ID命名的文件;
  $ cat /proc/进程ID/maps