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

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
分享到:
评论

相关推荐

    数据结构与算法分析Java语言描述

    内容简介 · · · · · ·本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐) 基本信息 原书名: Pro Oracle SQL 原出版社: Apress 作者: (美)Karen Morton Kerry Osborne Robyn Sands Riyaj Shamsudeen Jared Still 译者: 朱...

    数据结构与算法分析 : Java语言描述

    作者: 韦斯 (Mark Allen Weiss) 内容简介 · · · · · ·本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的...

    C语言入门经典(第4版)--源代码及课后练习答案

    11.1 数据结构:使用struct 403 11.1.1 定义结构类型和结构变量 405 11.1.2 访问结构成员 405 11.1.3 未命名的结构 408 11.1.4 结构数组 408 11.1.5 表达式中的结构 411 11.1.6 结构指针 411 11.1.7 为结构...

    Tcl_TK编程权威指南pdf

    本书共分为55章,依次详细讲述了Tcl基础、Tcl高级特性、TK基础、TK组件、TK详解、C语言编程、各版本之间的差异等方面的知识,并通过大量实例,生动翔实地向读者介绍了Tcl/Tk编程,是读者掌握Tcl/Tt的必备参考书。...

    UNIX环境高级编程

    目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 ... 本书内容丰富权威,概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士—都是一本无价的参考书籍。

    中文版Excel.2007高级VBA编程宝典.part1

    本书的作者是当之无愧的世界级Excel电子表格专家,他为读者倾心打造了这本专著,书中汇聚他15年来使用Excel的所有经验,涵盖Excel应用和VBA编程涉及的方方面面,是经典著作Excel 2003 Power Programming with VBA的...

    TCPIP高效编程:改善网络程序的44个技巧 PDF中文版带书签-目录

    本书组织方式比较特别,正文部分包括4 章,将网络编程中存在的常见问题组织成44 个技巧,探讨问题的过程中构建并运行了多个程序,并且指出了代码的源地址,便于读者查看。全书以技巧的形式解答了日常工作中遇到的...

    BASIC编辑器

    - 不需要任何运行时库 - 完全结构化编程 - 完全系统API呼叫支持 - 支持DirectX和SDL - 在OGRE支持下的3D - 使用汇编语言来访问特定硬件 - 代码的完全可移植性 - 专业的编辑和开发环境 - 完整的DEBUG和跟踪...

    SQL Server 2008高级程序设计 1/6

     本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和...

    SQL Server 2008高级程序设计 2/6

     本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和...

    SQL Server 2008高级程序设计 3/6

     本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和...

    purebasic零售版

    PureBasic 是一个新的基于"BASIC"标准的"高级"编程语言. 它兼容其它任何 "BASIC" 编译器, 不管它是Amiga 或 PC 格式. 学习 PureBasic非常简单! PureBasic已经赢得了很多初学者和专家.编缉时间是确实很快.它已经开发...

    UNIX环境高级编程(PDF)

    概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士 —都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 ...

    SQL Server 2008高级程序设计 5/6

     本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和...

    SQL Server 2008高级程序设计 4/6

     本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和...

Global site tag (gtag.js) - Google Analytics