`
evasiu
  • 浏览: 168969 次
  • 性别: Icon_minigender_2
  • 来自: 广州
博客专栏
Fa47b089-e026-399c-b770-017349f619d5
TCP/IP详解卷一>阅读...
浏览量:12524
社区版块
存档分类
最新评论

C专家编程--运行时数据结构

阅读更多

首先看一下编译完成后的可执行文件a.out的段在内存中的布局:

 


 

 

运行时数据结构有好几种,包括堆栈,活动记录(activation record)、数据、堆等。

 

堆栈主要有三个用途:

1. 堆栈为函数内部声明的局部变量(automic variable,自动变量)提供存储空间;

2. 进行函数调用时,堆栈存储与此有关的一些维护信息,即活动记录

3. 堆栈也可以被用作暂存储区。有时候程序需要一些临时存储,如计算一个很长的表达式时,可以把部分结果先压到堆栈中,当需要时再把它从堆栈中取出。通过alloca()函数分配的内存就是位于堆栈中(因此alloca可以避免内存泄漏)。

 

过程活动记录的结构:

 

 setjmp( jmp_buf j )和longjmp( jmp_buf j, int i)就是通过操纵过程活动记录实现的。 setjmp保存了一份程序的计数器和当前的栈顶指针,longjmp恢复这些值,有效地转移控制并把状态重置回保存状态的时候。

 

数据段和堆

BBS段和数据段可以合起来统称为数据段,BBS段和数据段一样,用于存储全局变量及静态变量,而BBS段只是有效地减少了可执行文件占用的空间(在可执行文件中,BBS段只是记录了需要多少空间,在运行的时候,在进程地址空间内为其分配相应的内存)。

就像堆栈段能够根据需要自动增长一样,数据段也包含了一个对象,用于完成这项工作,这就是堆(heap)。堆区域用于动态分配的存储,也就是通过malloc(或calloc, realloc)函数获得的内存,并通过指针访问。堆中的所有东西都是匿名的——不能按名字直接访问,只能通过指针间接访问。被分配的内存总是经过对齐,所以一般malloc的内存大小通常被圆整为2的乘方。回收的内存可供程序重新使用,但并不还给操作系统。(要想获得以后能够返回给系统内核的内存,可以使用mmap系统调用来映射/dev/zero文件,用munmap系统调用返回内存)

 

堆的末端用一个称为break的指针来标识。当堆管理器需要更多内存的时候,它可以通过系统调用brk和sbrk来移动break指针,sbrk向进程提供了惟一的方法将数据段内存返回给系统内核。用于内存管理的调用是:

malloc和free —— 从堆中获得内存以及把内存返还给堆

brk和sbrk —— 调整数据段的大小至一个绝对值(通过某个增量)

  • 大小: 42.3 KB
  • 大小: 16.5 KB
分享到:
评论

相关推荐

    严蔚敏《数据结构(C语言版)》示例代码

    《严蔚敏《数据结构(C语言版)》示例代码》是一份珍贵的编程学习资源,由清华大学出版社出版,作者严蔚敏教授是数据结构领域的权威专家。这份压缩包包含的是书中各种数据结构实现的C语言代码示例,旨在帮助读者深入...

    C语言的--类型标识符

    总的来说,理解和熟练运用这些知识点是成为C语言编程专家的基础,它们涵盖了程序设计的核心要素,对理解程序的运行机制和优化代码性能至关重要。在实际编程中,应灵活运用这些知识,以编写高效、清晰的C语言程序。

    深度剖析C编程 初级+中级+高级 基础+数据结构源码+组成原理+操作系统及C语言高级

    更重要的是,通过实践项目和案例分析,您将有机会将这些理论知识运用到实际问题的解决中,成为一名真正的C语言专家。无论是在学术研究还是工业界,扎实的C语言功底都将为您的职业生涯打下坚实的基础。

    c语言编程学习专家教程

    ### C语言编程学习专家教程知识点概述 C语言作为一种结构化编程语言,在计算机科学领域具有举足轻重的地位。本教程旨在为初学者提供一个全面、系统的学习路径,帮助他们掌握C语言的基础知识与高级特性,并能够运用...

    windows internals 7th-2; windows 内核数据结构;内核编程参考;英文PDF转word原版

    7. **编程语言**:虽然书中未明确提及具体编程语言,但通常涉及Windows内核编程时,会用到C和C++,因为这两种语言可以直接操作内存和系统资源,适合编写低级别的系统代码。 8. **版权和法律声明**:书中明确指出,...

    C语言经典编程源代码打包下载,共900例.rar

    结构体是C语言中组合多种数据类型的关键,通过实现简单的数据结构,如队列、栈或树,你可以学习如何有效组织和操作数据。文件操作是任何应用程序不可或缺的部分,这些例子可能包含读写文本文件、二进制文件和处理...

    数据结构资料全集-严蔚敏

    严蔚敏教授是数据结构领域内的知名专家,其编著的《数据结构》一书是该领域的经典教材,特别适合用C语言学习者。这个压缩包集合了严蔚敏教授关于数据结构的多种资源,包括书本代码、课后答案、讲义以及题集,为深入...

    数据结构(C语言版)源代码

    本资源“数据结构(C语言版)源代码”提供了黄国瑜和叶乃菁两位专家的教材配套教学材料,包括PPT和源代码,帮助学习者深入理解数据结构的理论与实践。 首先,我们要了解数据结构的基本概念。数据结构是指一组数据的...

    可编辑的《C专家编程》

    通过以上内容的梳理,《C专家编程》不仅涵盖了C语言的核心知识点,还涉及到了一些高级话题,如内存管理、指针操作等,这些都是成为一名优秀C程序员不可或缺的知识技能。此外,书中还穿插了一些有趣的故事和案例,...

    数据结构教程李春葆课件+源码+试题

    2. **源码部分**:源码是实现数据结构算法的代码示例,通常使用C、C++、Java等编程语言编写。这些代码可以帮助学习者理解算法的实际运行过程,通过阅读和调试代码,能够提升编程能力和问题解决能力。源码可能包括了...

    《数据结构(用C语言描述)》-王宇川-电子教案

    《数据结构(用C语言描述)》是一本针对21世纪高职高专创新精品规划教材的经典著作,由王宇川、郭建东等专家主编。本书深入浅出地介绍了数据结构这一计算机科学的核心课程,旨在帮助读者理解并掌握数据结构的基本概念...

    苏小红-C语言程序设计-资料包

    《苏小红-C语言程序设计》是一套针对初学者精心编排的C语言教学资源,由教育专家苏小红教授倾力打造。该资料包涵盖了从基础到进阶的C语言编程知识,旨在帮助学习者逐步掌握这门强大的编程语言。 在资料包中,包含了...

    高质量C语言编程

    理解和熟练使用它们,可以使数据结构设计更加灵活。 7. **文件操作**:学会使用stdio库中的函数进行文件的读写操作,以及理解和使用文件流,是处理I/O任务的基础。 8. **编译与链接**:理解编译器的工作原理,学会...

    C语言程序设计-经典教程(非扫描版 非谭).rar

    10. **错误处理和调试**:教程可能还会包含一些关于如何处理运行时错误和使用调试工具的知识,这对于培养良好的编程习惯至关重要。 除了主教程PDF外,压缩包中还包括了一个名为“Foxit PDF 阅读器.exe”的PDF阅读器...

    数据结构(C语言)老严的课件

    9. **动态内存分配**:C语言提供了`malloc`、`calloc`、`realloc`和`free`等函数,用于在程序运行时动态地分配和释放内存,这对于创建复杂的数据结构至关重要。 老严的课件可能涵盖以上这些主题,并通过C语言代码...

    严蔚敏.吴伟民等《数据结构(c语言版)》一书的全部源代码.rar

    《数据结构(C语言版)》是由著名计算机教育专家严蔚敏教授和吴伟民老师共同编著的经典教材,这本书深入浅出地介绍了数据结构的基本概念、原理和方法,并且使用C语言作为实现语言,为读者提供了丰富的源代码实例。...

    数据结构和算法分析C语言描述习题答案(全部)

    总的来说,这份资料是学习数据结构和算法的宝贵资源,不仅可以帮助你加深对概念的理解,还可以提升你的编程技能,特别是当你遇到实际问题时,这些知识将发挥巨大作用。建议你不仅要完成习题,还要尝试自己去推导算法...

    数据结构(C语言版)

    根据提供的信息,我们可以推断这本书《数据结构(C语言版)》是由严蔚敏与吴伟民两位专家主编,由清华大学出版社出版。本书主要讲解了数据结构的基本概念、原理及其实现方法,并采用C语言作为编程实现的语言。下面将...

Global site tag (gtag.js) - Google Analytics