C程序员的错误处理
  errno/perror/strerror 都是系统设计好的
  自定义函数中的错误处理
   1 可以返回-1 代表错误
   2 指针类型可以用 NULL 代表错误
   3 如果不需要考虑错误,用void
  环境变量和环境表
   extern char** environ;
   (用指针操作字符串数据/字符串 是基本能力)
  内存管理
   内存管理的依附关系:
    STL-自动管理 -> C++ new/delete ->
    C malloc/free ->Unix sbrk/brk -> Unix mmap
   内存的管理 使用 虚拟内存地址 技术,就是说:程序员 接触的是 虚拟的地址,不是 真实的 物理内存地址。虚拟内存地址 必须 映射到 物理内存 才能真正使用(mmap),否则 产生段错误。虚拟内存地址有用户空间(0-3G)和内核空间(3G-4G)之分。
   一个进程(就是运行起来的程序)内存是分为以下部分:
   1 代码区 存函数 (只读区),常量和字面值近似
   2 全局区 存static和初始化的全局变量
   3 BSS段  存未初始化的全局变量
   4 栈     存局部变量(包括函数的参数)
   5 堆     自由区,由程序员控制

 

可以用cat /proc/进程ID/maps 查看内存的分配情况
进程ID 可以用 ps -aux查看,也可以用 getpid()取得。
  malloc 一次分配33个内存页,但如果申请的内存比较大(超过32个内存页)就会分配比申请的内存 稍大一点的内存页数(不固定)。
  malloc分配内存时,先记录附加信息,然后再返回一个首地址。但不影响使用。
  如果33个内存页用完,会增加新的内存页,不一定是66个。
  由于 内存映射 非常耗费时间,所以free并不确保一定解除映射。malloc分配的内存,free会最后保留33个内存页,直到内存被清空时。
  结论:申请内存用malloc,释放内存用free.

  getpagesize()函数可以取得内存页的大小。
  注:不同进程之间即使虚拟地址一样,也是对应不同的物理内存。(IPC之共享内存除外)

  brk和sbrk
   底层维护了一个位置,由位置决定内存的分配或回收。
   sbrk本身可以申请/释放内存,
   void* sbrk(int num)
   num 是正数 申请内存,同时移动位置,把移动之前的位置作为首地址返回。
   num 是负数 释放内存,同时移动位置,返回值意义不大。
   num 是0 取当前的位置地址。
  sbrk是以 一个内存页作为操作内存的基本单位。
  经验:sbrk分配内存简单,但释放内存 麻烦。
  sbrk一般用于 分配内存,brk 负责回收内存。
  练习:
   用sbrk申请内存,用brk释放内存,实现以下要求
   存放一个整数,再存放一个double,再存放一个长度为8的字符串,放入"abcd",最后,逐一释放空间。

  mmap负责 映射 物理内存/文件。
   关于多个选项合并的方式:
   用一个二进制位代表一种权限,用 | 进行合并。
   001 - 执行
   010 - 写权限 PROT_READ
   100 - 读权限 PROT_WRITE

   PROT_READ | PROT_WRITE  -> 110

  取 i的后8位
   i & 0xFF

  1000 0000
  1111 1111

unix c 03的更多相关文章

  1. 三个入侵的必备小工具-lcx.exe、nc.exe、sc.exe

      lcx.exe的使用方法 以前抓肉鸡都是通过1433弱口令,然后.. 但是发现很多服务器开了1433,3389,但是终端是连不上的,因为服务器本身是在内网,只对外开放了1433端口,幸好有lcx. ...

  2. 2016-1-28 图解HTTP(03)

    6.2.5 非HTTP/1.1首部字段        不限于RFC2616中定义的47种首部字段,还有Cookie.Set-Cookie和Content-Disposition等在其他RFC中首部字段 ...

  3. UNIX系统的显示时间何时会到达尽头

    本文分为三个小块: 一.UNIX系统中时间的存储形式: 二. time_t 的最大值是多少: 三. 将time_t 的最大值转化为真实世界的时间: #---------------------# # ...

  4. UNIX常用命令

    以下只说明各常用指令的基本用法, 若需详细说明, 请用 man 去读详细的 manual. 1.关於档案/目录处理的命令 ls--列目录 这是最基本的档案指令. ls 的意义为 "list& ...

  5. js 取得 Unix时间戳(Unix timestamp)

    js 取得 Unix时间戳 Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间19 ...

  6. Unix权限管理

    // */ // ]]> Unix权限管理 Table of Contents 1 Unix权限管理 2 进程权限 3 文件权限 4 进程对文件的存取访问的权限校验过程 1 Unix权限管理 权 ...

  7. multiple definition of `err_sys' 《UNIX环境高级编程》

    本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...

  8. UNIX Time 时间戳 与 北京时间 相互转换

    typedef struct t_xtime { int year; int month; int day; int hour; int minute; int second; } _xtime ; ...

  9. Unix Shell 程序设计 —— 正则表达式

    参考:http://www.cnblogs.com/erichhuang/archive/2012/03/13/2394119.html 简介: 简单的说,正则表达式是一种可以用于模式匹配和替换的强有 ...

随机推荐

  1. JAVA泛型编程笔记

    1介绍 Java泛型编程是JDK1.5版本后引入的.泛型让编程人员能够使用类型抽象,通常用于集合里面. 下面是一个不用泛型例子: List myIntList=new LinkedList(); // ...

  2. Java学习之Iterator(迭代器)的一般用法

    迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的I ...

  3. php中strstr、strrchr、substr、stristr四个函数的区别总结

    php中strstr.strrchr.substr.stristr四个函数的区别总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-09-22我要评论 这篇文章主要介绍了php ...

  4. C++——try、throw、catch实例学习程序

    #include<iostream> #include<stdexcept> //exception/stdexcept/new/type_info头文件里都有定义的标准异常类 ...

  5. telnet IP不通/sybase central工具无法连接到数据库

    问题描述:客户端sybase central工具无法连接到数据库 服务端操作系统:RHEL5.8_x64,安装sybase-ASE15.7,端口号4112  IP:192.168.1.220  hos ...

  6. IOS6和IOS7的屏幕适配问题

    自从IOS7出来以后,以前写在IOS6上或者更低版本的程序,跑在IOS7的模拟器上就会出现一些问题.最大的问题就是,所有的UI空间都会统一向上移动20个点(如果空间的y值为0,就会被StatusBar ...

  7. line-hight-(行高)解析

    行高定义:line-height属性是指文本行基线之间的距离. 顶线.中线.基线.底线概念 从上到下四条线分别是顶线.中线.基线.底线,很像才学英语字母时的四线三格,我们知道vertical-alig ...

  8. PixelFormat 枚举

    成员名称 说明 Alpha 像素数据包含没有进行过自左乘的 alpha 值. Canonical 默认像素格式,每像素 32 位. 此格式指定 24 位颜色深度和一个 8 位 alpha 通道. Do ...

  9. (一)Activity参数传递

    1.主Activity,用于启动另一个Activity()public class MainActivity extends Activity { @Override protected void o ...

  10. weblogic开机启动-超简单

    1.编写weblogic启动脚本,命名为start_weblogic_server.sh,内容如下:  #!/bin/bashnohup /home/weblogic/Oracle/Middlewar ...