C专家编程(5-6)
运行是的数据结构
1、a.out是编译和链接的输出文件
2、几种文件格式
System V的可执行文件格式ELF (Extensible Linker Format or Executable and Linking Format)
其他一些系统的文件格式:COFF (Common Ojbect-File Format)公共目标文件格式
3、size a.out 可以输出三个段(文本、数据、bss)的大小,nm和dump都可以用于查看可执行文件的内容。
Bss段内只注明定义而未初始化的变量的大小
数据段为初始化后的全局和静态的变量
4、运行时载入器取文件中的段的映象放入内存中(图2)
按bss段的大小在内存中开出一个内存区
堆栈段用于保存局部变量、临时数据、传递到函数的参数,还有通过malloc()函数分配的内存。
地址最低端未被映射的部分,对他的引用将会引起错误,他用于捕捉使用空指针和小整数型值的指针引用内存的情况。
5、程序运行时数据结构有堆栈、活动记录、数据、堆
堆栈通过sp维护,并且可以修改堆栈里面的值
堆栈的三个作用:
内部声名的局部变量、函数调用时存储一些维护性信息、malloc()函数分配空间
6、过程活动记录在内存中的布局
对局部变量指针的引用会造成错误
7、setjmp和longjmp的用途
setjmp(jmp-buf j)先被调用,使用变量记录当前的位置(pc和sp),返回0;
longjmp(jmp-buf j, int i) //返回到j记录的位置,函数返回i;还注销了j的内容;
setjmp/longjmp的用途是错误返回;
8、一些工具
对内存的思考
1、 intel8086的20位地址形成
1、 intel 80x86内存模型和工作原理
8086的段是一块64k的内存区域,段地址放在段寄存器中,偏移地址(段内地址)为指令提供;
2、 虚拟内存
虚拟内存以“页”的形式组织,可以通过/usr/ucb/pagesize来观察你的系统页的大小,MMU对页进行管理和操作
3、 每个进程内存管理
管理内存可调用:malloc和free——从内存中分配指定大小的内存块和释放
brk和sbrk——调整数据段的大小至一个绝对值
4、 内存泄露问题
堆出现的两个问题
(1)、使用未释放的内存区(数据错误)
(2)、未释放不用的内存区(内存泄露)
可以使用/usr/sbin/swap –s来查看有多少可用的交换空间
5、 总线错误
(1)、bus error (core dumped) 总线错误(信息转储)
在分配内存的时候都以类型大小的整数倍为边界,若地址未对齐是进行读或写就会引起总线错误,象将char的指针转换为int指针就会出错。
(2)、segmentation error (core dumped)段错误 (信息转储)
由于内存管理单元的异常所致,解除一个未初始化或非法值的指针引起的
引起段错误的几个原因:
1)、解除引用一个非法指针
2)、解除引用一个空指针
3)、在未得到权限的时进行访问
4)、用完堆栈和内存
发生的频率:a、坏指针的使用;b、改写的错误(超过数组的边界);c、指针释放的错误(多次释放指针和释放未使用的内存);
系统在出现总线错误和段错误后进行信息转储并终止,也可以设置一个信号处理程序进行处理
C专家编程(5-6)相关推荐
- c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码
c专家编程/c陷阱 by Dmitri Grabov 德米特里·格拉波夫(Dmitri Grabov) 如何避免常见的初学者陷阱并像专家一样开始编码 (How to avoid common begi ...
- 一篇特别长的总结(C专家编程)
博客链接: http://codeshold.me/2017/02/expert_c_programming.html 读一本书必输出一篇笔记或者总结!!! <C专家编程>这本书很早看完了 ...
- C专家编程—使用unsigned int可能产生的Bug(1)
在vs2008环境下,如下代码显示不同的结果: #include<stdio.h> #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0 ...
- Python专家编程
Python专家编程 一.CPython CPython是一个默认的.广泛使用的Python编程语言的实现.CPython是用C语言写的.除了CPython,还有两个高质量的Python实现:一个是J ...
- 《C陷阱与缺陷》和《C专家编程》两本书又翻印了
今天花了几个小时逛书店,偶然让我发现了<C陷阱与缺陷>和<C专家编程>这两本书.这让我很惊喜,喜欢收集书的我当然不会错过,一口气,两本书都收录了. 其实这两本我都已经下载了电子 ...
- 《JavaScript专家编程》——第1章 对象和原型 1.1鸟瞰JavaScript
本节书摘来自异步社区<JavaScript专家编程>一书中的第1章,第1.1节,作者:[美]Mark Daggett(达格特)著,更多章节内容可以访问云栖社区"异步社区" ...
- 《C专家编程》一1.6 它很棒,但它符合标准吗
本节书摘来自异步社区<C专家编程>一书中的第1章,第1.6节,作者 [美]Perter Van Der Linde,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 《C专家编程》随笔1:读者心得
自己在阅读完<C和指针>和<C陷阱与缺陷>之后,结合实际的项目,对C语言有了一定熟悉. <C和指针>是一本非常不错的C语言基础书,详细介绍了C语言的知识点,相对于谭 ...
- c语言多态性编码图形,C和C++经典著作 C专家编程Expert C Programming Deep C Secrets pdf...
摘要 <C专家编程>可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言基础的程序员,<C专家编程>可以帮助他们站在C的高度了解和学习C++.书本撷取了几十个 ...
- C专家编程 模块化与有限机编写cdecl声明程序
自己编写cdecl: //char * const *(*next)();示例 //结果:identifier is(标识符是)next //指向next的指针函数返回指向const的指针指向char ...
最新文章
- linux笔记本没有insert,无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)...
- squid正反向代理-加快网站访问速度
- No rule to make target ‘../../libxxx_lib.so‘
- linux命令查看几位,Linux每周几个命令(一)--查找篇
- 计算机文献检索综合性实验报告,文献检索综合性实验报告模板.doc
- Eclipse出现Class Not Found异常时可以参考我所知道的一个方案
- Android 光线传感器的调用
- Spring MVC提供http接口供下载文件
- html背景视频模糊效果,怎么给竖屏视频添加模糊背景效果?
- 谷歌推出开源工具DeepVariant,用深度学习识别基因变异
- 【翻译】MSIL 教程(一)
- 【工程处理技巧一篇】基于半规则数据的命名实体消歧识别【未完】
- 算法设计与分析——概述
- 51单片机——多文件的建立
- PSD文件太大?高效压缩插件!
- OPenCV4-颜色识别(二)三原色识别
- 英伟达 Nano 新手必读:Jetson Nano 深度学习算法模型基准性能测评
- MySQL的循环语句使用总结
- java-php-python-springboot线上教学平台计算机毕业设计
- php 获取到当前ip,获取当前IP地址,跳转到对应城市网站。