运行是的数据结构

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)相关推荐

  1. c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码

    c专家编程/c陷阱 by Dmitri Grabov 德米特里·格拉波夫(Dmitri Grabov) 如何避免常见的初学者陷阱并像专家一样开始编码 (How to avoid common begi ...

  2. 一篇特别长的总结(C专家编程)

    博客链接: http://codeshold.me/2017/02/expert_c_programming.html 读一本书必输出一篇笔记或者总结!!! <C专家编程>这本书很早看完了 ...

  3. C专家编程—使用unsigned int可能产生的Bug(1)

    在vs2008环境下,如下代码显示不同的结果: #include<stdio.h> #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0 ...

  4. Python专家编程

    Python专家编程 一.CPython CPython是一个默认的.广泛使用的Python编程语言的实现.CPython是用C语言写的.除了CPython,还有两个高质量的Python实现:一个是J ...

  5. 《C陷阱与缺陷》和《C专家编程》两本书又翻印了

    今天花了几个小时逛书店,偶然让我发现了<C陷阱与缺陷>和<C专家编程>这两本书.这让我很惊喜,喜欢收集书的我当然不会错过,一口气,两本书都收录了. 其实这两本我都已经下载了电子 ...

  6. 《JavaScript专家编程》——第1章 对象和原型 1.1鸟瞰JavaScript

    本节书摘来自异步社区<JavaScript专家编程>一书中的第1章,第1.1节,作者:[美]Mark Daggett(达格特)著,更多章节内容可以访问云栖社区"异步社区" ...

  7. 《C专家编程》一1.6 它很棒,但它符合标准吗

    本节书摘来自异步社区<C专家编程>一书中的第1章,第1.6节,作者 [美]Perter Van Der Linde,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  8. 《C专家编程》随笔1:读者心得

    自己在阅读完<C和指针>和<C陷阱与缺陷>之后,结合实际的项目,对C语言有了一定熟悉. <C和指针>是一本非常不错的C语言基础书,详细介绍了C语言的知识点,相对于谭 ...

  9. c语言多态性编码图形,C和C++经典著作 C专家编程Expert C Programming Deep C Secrets pdf...

    摘要 <C专家编程>可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言基础的程序员,<C专家编程>可以帮助他们站在C的高度了解和学习C++.书本撷取了几十个 ...

  10. C专家编程 模块化与有限机编写cdecl声明程序

    自己编写cdecl: //char * const *(*next)();示例 //结果:identifier is(标识符是)next //指向next的指针函数返回指向const的指针指向char ...

最新文章

  1. linux笔记本没有insert,无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)...
  2. squid正反向代理-加快网站访问速度
  3. No rule to make target ‘../../libxxx_lib.so‘
  4. linux命令查看几位,Linux每周几个命令(一)--查找篇
  5. 计算机文献检索综合性实验报告,文献检索综合性实验报告模板.doc
  6. Eclipse出现Class Not Found异常时可以参考我所知道的一个方案
  7. Android 光线传感器的调用
  8. Spring MVC提供http接口供下载文件
  9. html背景视频模糊效果,怎么给竖屏视频添加模糊背景效果?
  10. 谷歌推出开源工具DeepVariant,用深度学习识别基因变异
  11. 【翻译】MSIL 教程(一)
  12. 【工程处理技巧一篇】基于半规则数据的命名实体消歧识别【未完】
  13. 算法设计与分析——概述
  14. 51单片机——多文件的建立
  15. PSD文件太大?高效压缩插件!
  16. OPenCV4-颜色识别(二)三原色识别
  17. 英伟达 Nano 新手必读:Jetson Nano 深度学习算法模型基准性能测评
  18. MySQL的循环语句使用总结
  19. java-php-python-springboot线上教学平台计算机毕业设计
  20. php 获取到当前ip,获取当前IP地址,跳转到对应城市网站。

热门文章

  1. java计算机毕业设计飞机航班信息查询系统源码+mysql数据库+系统+lw文档+部署
  2. Latex中的实心原点
  3. 使用vue2实现打印在线word文件,文件流形式打印在线word,预览打印
  4. 浅析敏捷项目管理中的5大阶段
  5. springboot实现反向代理
  6. C++初学必练基础题【第二期】
  7. JWT详细讲解(保姆级教程)
  8. 云计算的三个应用实例
  9. vue@2.6.14购物车统计总价
  10. 小程序实战—答题类小程序