Summary Day30
2015-06-04 23:55
176 查看
1.内存管理
1.1 进程中的内存区域划分
代码区 只读常理区 全局区 BSS 堆 栈
1.2 字符串存储形式之间的比较
字符指针,字符数组,字符动态内存
1.3 虚拟内存管理技术
Unix/Linux系统总的内存都是采用虚拟内存管理技术进行管理,即:每个进程都有0~4G的内存地址
(虚拟的并不是真实存在的),由操作系统负责把内存地址和真实的物理内存映射起来,因此,不同进程
的内存地址看起来是一样的,但是所对应的物理内存是不一样的。
用户空间 0~3G, 虚拟内核空间3~4G
1.4 段错误的由来
(1)scanf函数缺少 &
(2)空指针、野指针的使用
(3)师徒使用一个没有经过映射的虚拟地址可能引发段错误
1.5使用malloc申请动态内存的特性
需要额外的12个字节用于存储管理动态内存信息
采用链表的方式处理多个内存块
使用malloc千万不要越界
(2)使用malloc 申请内存的一般映射
一般说来,使用malloc申请较小的内存时,操作系统一次性分配33个内存页
#include <unistd.h>
getpid() 获取当前进程的进程号
cat / proc/ 进程号/maps 查看指定进程的内存分配情况
1.6使用free释放动态内存特性
1.7 内存处理相关函数
(1)getpagesize 函数
函数功能:
主要用于获取当前系统中一个内存页大小,一般为4kb
(2)sbrk函数
#inlcude <unistd.h>
void *sbrk(intptr_t increment);
(3)brk函数
int brk(void *addr);
sbrk 申请 brk 释放
1.1 进程中的内存区域划分
代码区 只读常理区 全局区 BSS 堆 栈
1.2 字符串存储形式之间的比较
字符指针,字符数组,字符动态内存
1.3 虚拟内存管理技术
Unix/Linux系统总的内存都是采用虚拟内存管理技术进行管理,即:每个进程都有0~4G的内存地址
(虚拟的并不是真实存在的),由操作系统负责把内存地址和真实的物理内存映射起来,因此,不同进程
的内存地址看起来是一样的,但是所对应的物理内存是不一样的。
用户空间 0~3G, 虚拟内核空间3~4G
1.4 段错误的由来
(1)scanf函数缺少 &
(2)空指针、野指针的使用
(3)师徒使用一个没有经过映射的虚拟地址可能引发段错误
1.5使用malloc申请动态内存的特性
需要额外的12个字节用于存储管理动态内存信息
采用链表的方式处理多个内存块
使用malloc千万不要越界
(2)使用malloc 申请内存的一般映射
一般说来,使用malloc申请较小的内存时,操作系统一次性分配33个内存页
#include <unistd.h>
getpid() 获取当前进程的进程号
cat / proc/ 进程号/maps 查看指定进程的内存分配情况
1.6使用free释放动态内存特性
1.7 内存处理相关函数
(1)getpagesize 函数
函数功能:
主要用于获取当前系统中一个内存页大小,一般为4kb
(2)sbrk函数
#inlcude <unistd.h>
void *sbrk(intptr_t increment);
(3)brk函数
int brk(void *addr);
sbrk 申请 brk 释放
相关文章推荐
- Android 数据库打包随APK发布
- Two Sum的快排暴力解法
- Swift—初始 (1)
- 1到N中“1”出现的次数
- php浮点数精确运算
- Android 开发中,如何将 SQLite 和 APK 一起打包发布
- iOS: 剪裁UIImage部分不规则区域
- CRF的库资源
- stack, deque 和 queue的对比
- [SGU495] Kids and Prizes (概率dp)
- Lycn 2013 with SQL AlwaysOn 「一」建立AlwaysOn
- C语言之断言
- Java NIO系列教程(七) FileChannel
- [3]_人人都是产品经理
- yaf 路由协议配置测试
- 实验三 敏捷开发和XP实验
- php BC高精确度函数库
- [转载]js删除几种方式
- ANDROID开发:将数据库文件与项目包一起打包成APK文件
- 输入法