您好,欢迎访问一九零五行业门户网

内存管理(2)(某培训机构视频笔记)

回顾: brk/sbrk int brk(void *p); 改变绝对位置。 void *sbrk(int); 相对改变位置。 维护一个位置。brk/sbrk改变这个位置 补充:全新的类型 c的基本类型就:整数(1,2,4),小数(4,8) 所有全新类型都是使用typedef重新定义,新的类型的c的原型 类型重
回顾:
          brk/sbrk
          int brk(void *p);       改变绝对位置。
void *sbrk(int);        相对改变位置。
维护一个位置。brk/sbrk改变这个位置
补充:全新的类型
                      c的基本类型就:整数(1,2,4),小数(4,8)
                      所有全新类型都是使用typedef重新定义,新的类型的c的原型
                      类型重定义的好处:
                              1 维护方便
                              2 移植
3 容易理解
一  映射虚拟内存
      没有任何额外维护数据的内存分配
             mmap(分配)/unmap(释放)
             1 函数说明  
              void *mmap(
                        void *addr,  // 指定映射的虚拟地址   0由系统指定位置
size_t length,  // 映射空间大小       pagesize倍数
int prot,  // 映射权限   prot_none  prot_read prot_write  prot_exec
int flags, //映射方式   内存映射:匿名映射。    文件映射:映射到某个文件  只有文件映射最后两个参数才有效
                                               int fd,  //文件描述符号
off_t offset); // 文件中的映射开始位置  (必须是pagesize的倍数)
             map_anonymous   
             map_shard map_private(二选一)
2  案例        
#include #include #include #include int main(){ int *p = mmap( null, getpagesize(), prot_read|prot_write, map_anonymous|map_shared, 0,0); *p = 20; *(p+1) = 30; *(p+2) = 30; printf(%d\n,p[2]); munmap(p, 4096); return 0;}  
3 总结 
    选择什么样的内存管理办法?
             智能指针(指针池)
stl
             new
             malloc(小而多数据)
             brk/sbrk(同类型大块数据,动态移动指针)
             mmap/munmap(控制内存访问/使用文件映射/控制内存共享)
4 应用
二 编译工具与动态库
      1、gcc
             -o       输出文件名
-o    -o0    -o1    -o2    -o3 编译优化
             -g     -g0    -g1     -g2    -g3 产生调试信息
             -wall  显示所有警告          -werror   把警告当错误   
             -w 关闭警告
             -c 只编译不链接
             -e 预编译
             -s   汇编
             -d  在命令行定义宏
在代码中定义宏,在命令行定义宏
              -x  指定编译语言类型
              -std = c89
               -std = c99
编译过程: -e   -c  -s  自动调用连接器
连接器   ld
补充:.c   .cpp    .h     .hpp    .o   .a      .so     .i  预编译文件     .s 汇编文件
三、静态库的编译
               1、编译过程(*.a    achieve)
                      编译成目标文件
                        -static   
                       gcc    -c    -static    代码文件.c
归档成静态库
                         ar 工具  -r  -t          静态库文件   被归档文件
                          nm工具(查看函数符号表) 静态库或者动态库或者目标文件或者执行文件
                       gcc   代码   静态库
                使用静态库完成如下程序:
                            输入菱形半径,打印菱形          输入整数封装成iotool      菱形的打印封装成graphics
#include int inputint(const char * info){ int r; printf(%s, info); scanf(%d, &r); return r;}
#include void diamond(int r){ int x, y; for(y = 0; y
四、动态库的编译

其它类似信息

推荐信息