摘要: 本文介绍malloc和free函数的内容。 在C中,对内存的管理是相当重要。下面开始介绍这两个函数: 一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte):该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2、函数的用法:其实这两个函数用起来... 阅读全文
posted @ 2013-05-27 20:59 tangr206 阅读(200) 评论(0) 推荐(0) 编辑
摘要: malloc,free详解Both brk() and mmap() cause pages to be mapped into the process's address space. mmap() can be used to map pages of a file into memory, but it can also be used only to map pages, i.e., allocate memory. brk() is just a specific interface to the VM subsystem which maps pages at a spec 阅读全文
posted @ 2013-05-27 20:41 tangr206 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 分类:Linux/Shell2013-03-15 23:411284人阅读评论(0)收藏举报lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。例如:传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表,对系统监测和排 阅读全文
posted @ 2013-05-27 13:36 tangr206 阅读(960) 评论(0) 推荐(0) 编辑
摘要: 分类:Linux2008-09-06 15:04533人阅读评论(0)收藏举报linuxlinux内核化工nullthread工具当使用top等工具查看系统运行情况的时候,会知道当前(准确地说是过去的几秒钟内)处理器的利用率有多少。用户态占了多少,核心态占了多少,idle占了多少。我们通常把idle就视为系统空闲,但是这个"空闲"到底代表什么意思?接下来我们探讨一下。1. idle是什么 简单的说idle是一个进程,其pid号为0。其前身是系统创建的第一个进程,也是唯一一个没有通过fork()产生的进程。在smp系统中,每个处理器单元有独立的一个运行队列,而每个运行队列上又 阅读全文
posted @ 2013-05-27 13:14 tangr206 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 分类:Linux2008-09-06 14:521026人阅读评论(0)收藏举报linux数据结构编译器solarisdb2null前几次我们分析了Linux系统中用户进程的4G虚存大致分为了几个部分,介绍了3G用户空间中数据段,代码段等静态区域的虚存管理,重点分析了栈的使用。这次我们来分析一下虚存使用中另一个重要部分--堆。前面的介绍中,我们知道编译器,操作系统担负着大量栈分配管理的工作。不论是静态分配的栈空间还是用户动态分配的栈空间,在函数返回的时候就自动释放了。堆的使用比之栈而言更为灵活,允许程序员动态的分配并释放,但也意味着,堆的使用需要程序员更为小心。4.5 堆的内存管理在学习&qu 阅读全文
posted @ 2013-05-27 11:21 tangr206 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 分类:Linux2008-09-06 14:51745人阅读评论(0)收藏举报linux汇编编译器linux内核数据结构c上次我们分析了用户进程在虚存中的大致分布,这次我们就来分析一下,用户进程的4G虚存是怎么管理的,其对应的物理内存又是怎么维护的。4. 用户进程的内存管理机制4.1 虚拟内存和物理内存前几次我们分析了什么是物理内存,什么是虚拟内存,也反复强调了虚存不同于物理内存。虽然用户程序看到的是虚拟内存,但真正运行的时候还是必须运行在物理内存上的,这就涉及到一个虚拟内存分配和物理内存分配之间关系的问题。后面我们会详细展开了讲,但这里要先让大家明确一个概念,就是物理内存的延迟分配。因为物理 阅读全文
posted @ 2013-05-27 11:03 tangr206 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 分类:Linux2008-09-06 14:50711人阅读评论(0)收藏举报linuxlinux内核windowsgcc编译器bbs上次我们讲到了硬件平台和操作系统对物理内存的管理机制,经过这两层处理,应用程序中只要好好利用自己独占的4G虚拟内存就行了。这次我们来讨论一下这应用程序是如何分配这4G内存的,当然这都离不开编译器,操作系统的帮助。PS: 在这之前,再强调一下,这里所说的虚拟内存是逻辑概念。和Windows平台上设置的那个虚拟内存不一样,那个相当于交换分区。3. 用户进程的虚存布局首先Linux把每个用户进程可访问的4G虚存空间分成两个大的部分。其中0x0~0xBFFFFFFF的3 阅读全文
posted @ 2013-05-27 10:57 tangr206 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 分类:Linux2008-09-06 14:48864人阅读评论(1)收藏举报linuxdescriptor平台程序开发tablerandom前几次我们分析了程序是如何在Linux上被加载运行的。这次我们尽量简洁的分析一下在Linux中,程序是如何使用内存,而系统又是怎样管理内存的。内存访问和管理是一个跨越应用程序,操作系统,硬件平台的一个复杂的过程。虽然过程很复杂,我们还是尝试着去理解一下。1. IA-32架构中的内存管理机制我们从硬件开始吧,内存归根结底是硬件,内存(Random Access Memory)在加电的情况下,在地址总线上放上要读取/写入的地址,然后就可以在控制信号的帮助下, 阅读全文
posted @ 2013-05-27 10:54 tangr206 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 分类:Linux2008-09-06 14:26443人阅读评论(0)收藏举报linuxshell编译器gccstruct平台 main()函数,想必大家都不陌生了,从刚开始写程序的时候,大家便开始写main(),我们都知道main是程序的入口。那main作为一个函数,又是谁调用的它,它是怎么被调用的,返回给谁,返回的又是什么?这次我们来探讨一下这个问题。1. main()函数的形式先来说说main函数的定义,较早开始写C程序的肯定都用过这样的定义void main(){},其实翻翻C/C++标准,从来没有定义过void main()。在C标准中main的定义只有两种: int main(vo 阅读全文
posted @ 2013-05-27 09:57 tangr206 阅读(199) 评论(0) 推荐(0) 编辑