Day24_环境表、UC内存管理机制

回顾:
  预处理指令 - #include  #define 条件编译
   #warning  #error  #pragma
   版本控制软件 - cvs vvs
  环境变量 - PATH、CPATH、LIBRARY_PATH、LD_LIBRARY_PATH
  静态库和共享库 - 主要使用共享库,使用共享库时,编译连接时 加上-l库名,使用时需要配置LD_LIBRARY_PATH。共享库和a.out都存在才能运行代码。
  C语言错误处理 - 用返回值处 理。
今天:
  C语言提供了错误相关函数和外部全局变量errno,错误由两种数据组成:错误编号和错误信息。errno就是其中的错误编号。调试程序需要借助错误信息。
   函数 strerror(int)-传入错误编号,得到信息
    perror("附加信息") - 打印错误信息并换行
    printf("%m") - 打印错误信息
   注:strerror()可以传入错误编号,而perror()和printf()只打印 errno对应的错误信息。
   errno发生错误会改变值,不发生错误不改变值。因此,不能用errno判断是否出错,还是用返回值判断是否出错。
   errno不是所有函数都使用,具体情况查看man

  环境变量和环境表
   环境表就是 环境变量的首地址,是一个字符指针数组。每个环境变量就是一个字符串,格式:"PATH=.:/bin:/sbin"。外部全局变量environ就是字符串数组的首地址。 用法:
  extern char** environ;
   环境表相关函数:
 getenv() - 按环境变量名取值
 setenv()  putenv() - 新增环境变量
 unsetenv() clearenv() - 删除环境变量
-----------------------------------------------------------
 Unix/Linux 内存管理
  程序在运行时,CPU负责运算,内存负责存储数据
  内存管理的函数/运算符:
   STL - 内存管理是全自动的
    |
   C++ - new分配内存 delete回收内存
    |
    C  - malloc()分配内存 free()回收
    |
  Unix系统函数 - sbrk() brk()
    |
  Unix系统函数 - mmap() munmap() 内存映射/解除用户层
                      用户层
-----------------------------------------------------------
 Unix系统函数(kmalloc/vmalloc) 内核层
-----------------------------------------------------------
  程序和进程的概念
    程序 - 就是硬盘上的文件,代码编译连接的结果
    进程 - 在内存中运行起来的程序(进程)
     一个进程的内存的划分:
      1.代码区/代码段: 代码(函数)都存在代码区,只读区
      2.全局区: 全局变量(初始化的)和static变量
      3.BSS段:未初始化的全局变量
       全局区和BSS段都是在main()执行之前分配,但BSS段都是在main()执行之前分配,但BSS段自动清0
      4.栈区: 非静态的局部变量和函数参数(形参),内存分配和回收 自动管理
      5.堆区: 也叫自由区,完全由程序员管理,通常内存泄露就是堆区管理出了问题
      6.只读常量区: 字符串字面值“abcde” 和 const的全局变量,只读区,和代码区非常近

  Unix/Linux 内存管理机制
   Unix/Linux采用虚拟内存地址机制; 每个进程先天都有0-4G的虚拟内存地址,本质就是整数(编号),与物理内存无关,虚拟内存地址不能直接存储数据,否则引发 段错误;虚拟内存地址必须映射到物理内存/硬盘文件后才能存储数据;程序员所接触都是虚拟内存地址;虚拟内存地址分为:用户地址空间和内核地址空间。用户空间0-3G,内核空间3G-4G;用户空间的代码不能直接进入内核空间
   内存分配其实就是虚拟地址映射物理内存的过程
   内存地址的单位是字节,但内存映射的单位是内存页,一个内存页 4096字节(4k),函数getpagesize可以直接获得内存页的大小
   Linux中,几乎一切都有文件与之对应,内存对应文件:/proc/进程ID/maps 文件对应内存中
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值