`
simohayha
  • 浏览: 1404235 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

linux下的管理内存相关的函数

阅读更多




malloc的实现,在linux下的实现是这样的,当所需要分配的内存大于128k,会用mmap(匿名映射)来实现。小于128k使用在堆分配(改天会分析下malloc函数的源码实现)。



这里还有几个

mallopt(int param,int value);

这个函数能设置一些内存分配管理的参数,也就是设置param为value的值(比如我们想要强制所分配的内存是mmap分配的)。具体的参数可以去看man手册。


使用这个很简单,就是在使用malloc之前设置就好了。

struct mallinfo mallinfo(void);

可以看下mallinfo结构体的结构;

struct mallinfo {
  int arena;    /* non-mmapped space allocated from system */
  int ordblks;  /* number of free chunks */
  int smblks;   /* number of fastbin blocks */
  int hblks;    /* number of mmapped regions */
  int hblkhd;   /* space in mmapped regions */
  int usmblks;  /* maximum total allocated space */
  int fsmblks;  /* space available in freed fastbin blocks */
  int uordblks; /* total allocated space */
  int fordblks; /* total free space */
  int keepcost; /* top-most, releasable (via malloc_trim) space */
};


也就是一些内存分配的统计信息。

还有就是在栈上复制字符串,我们可以用alloca+strcpy来实现,或者可以使用linux特别提供的2个函数:

char *strdupa(char *s);
char *strndupa(char *s)



下面来介绍locking memory

mlock (const void *addr,size_t len)

int mlockall(int flags)


第一个函数是锁住一段虚拟地址空间,第二个函数是锁住本进程的整个地址空间。

解锁用下面两个函数:

munlock (const void *addr,size_t len)

int munlockall(int flags)


由于locking memory对系统影响很大,因此这里系统有些限制。

可以看下man手册中的这段

引用
In Linux 2.6.8 and earlier, a process must be privileged (CAP_IPC_LOCK)
       in  order  to  lock  memory  and the RLIMIT_MEMLOCK soft resource limit
       defines a limit on how much memory the process may lock.

       Since Linux 2.6.9, no limits are placed on the amount of memory that  a
       privileged  process can lock and the RLIMIT_MEMLOCK soft resource limit
       instead defines a limit on how much memory an unprivileged process  may
       lock.





  • 大小: 78.1 KB
分享到:
评论
1 楼 flynetcn 2008-12-22  
http://www.ibm.com/developerworks/cn/linux/l-memory/index.html

相关推荐

    linux内存管理实验报告

    在本实验中,我们主要探讨了Linux虚拟内存管理的原理、动态内存操作函数的使用,以及如何检测主存使用情况。 首先,Linux内存管理采用虚拟内存技术,将每个进程的地址空间划分为多个区域,如堆、栈、代码段、数据段...

    linux下的内存映射函数mmap详解及示例代码.pdf

    Linux下的内存映射函数mmap详解及示例代码.pdf 本文档将详细介绍Linux下的内存映射函数mmap,包括其概念、实现机制、示例代码等方面的内容。 mmap概念 mmap是Linux操作系统中的一种内存映射机制,可以将文件映射...

    linux源代码分析之内存管理

    ### Linux源代码分析之内存管理 #### 摘要与关键词 本文档是对Linux内核内存管理系统的一个深入分析,特别是针对其源代码进行了详细的解读。Linux的内存管理是内核中最复杂的部分之一,它涉及到了内存初始化、地址...

    linux下的内存管理源代码

    它不仅为学习者提供了一个实践平台,还加深了对Linux内核如何高效管理内存资源的理解。通过对代码的深入研究,学习者可以进一步探索更复杂的内存管理策略,如分页、分段和多级缓存机制,以及它们在现代操作系统中的...

    linux下的内存映射函数mmap详解及示例代码

    Linux下的内存映射函数mmap详解及示例代码 Linux下的内存映射机制mmap是Linux内核中的一种机制,允许进程将文件映射到自己的地址空间中,从而实现文件I/O操作。该机制是基于虚拟存储(Virtual Memory,VM)概念的,...

    Linux内核内存管理

    Linux 采用了伙伴系统算法来管理内存,通过将内页按 2^0, 2^1, 2^2…2^10 大小进行分组,每次分配内存时,从相应大小的池中分配内存,然后再把余下的内存分配给它的下一级缓存池。 在 Linux 内核中,大内存分配的...

    linux下内存池实现

    4. 管理内存池:为了高效地管理内存块,通常会使用链表、哈希表或者位图等数据结构来记录内存块的状态(如空闲/已分配)。 在C或C++中实现内存池,可以自定义数据结构和接口,例如`alloc`和`free`函数。同时,为了...

    linux内核内存操作篇之内存操作相关函数

    Linux内核中的内存管理是一个复杂的主题,涉及多个层面的操作。本篇将详细介绍Linux内核中...在编写驱动程序或者进行内核开发时,合理地使用这些内存操作函数能够帮助我们更好地管理内存资源,提高程序的性能和效率。

    深入理解linux虚拟内存管理(中+英)

    Linux提供malloc和free函数供程序员分配和释放内存,实际上这些操作是由内存管理子系统处理的。内存分配可能涉及到匿名页(无文件映射的内存)和文件映射页(与磁盘文件关联的内存)。对于匿名页,Linux可能会使用...

    Linux下替换memset函数

    在Linux操作系统中,`memset`是一个非常常用的C库函数,用于将一块内存区域填充为特定的字节值。它的原型如下: ```c ...在遇到段错误时,深入理解Linux内存管理和程序执行的上下文是非常重要的。

    linux c api 函数

    3. **内存管理函数**:如`malloc`、`calloc`、`realloc`用于动态分配内存,`free`则用于释放内存。理解这些函数的工作原理对于避免内存泄漏至关重要。 4. **字符串处理函数**:如`strcpy`、`strcat`、`strcmp`、`...

    linux内核内存管理

    Linux内核内存管理是操作系统中极为重要的一个部分,它涉及到操作系统如何高效、合理地使用物理内存资源以及虚拟内存资源。Linux内核内存管理机制包括页面类型与组织、页面回收逻辑、内存区域划分、页面分配策略、...

    Linux下面向函数的动态内存泄漏监测.pdf

    本文提出了一种面向函数的动态内存泄漏检测方法,该方法关注于在Linux环境下对内存泄漏进行更精确的追踪和分析。 内存泄漏通常发生在程序分配动态内存后,未能在不再需要时释放它。虽然小型程序可能不会立即受其...

    Linux011-内存管理

    在Linux操作系统中,内存管理是核心功能之一,它关乎到系统的稳定性和性能。Linux0.11是一个早期版本的Linux内核,虽然相对简陋,但它的内存管理系统为我们理解现代Linux内核提供了基础。本节将深入探讨Linux0.11...

    Linux内存管理编程

    本实验旨在帮助你深入理解Linux环境下的内存管理机制,主要包括内存映射(mapping)和解除映射(unmapping),以及如何在内存中打开和读取文件。 一、Linux内存映射 内存映射是Linux提供的一种机制,允许将文件或...

    linux下的内存映射函数mmap详解及示例代码.doc

    内存对象(Memory Object)是指内存区与后备存储之间的映射,Linux系统使用虚拟存储(Virtual Memory)机制来管理内存对象,虚拟存储机制可以将不同的后备存储统一处理,并提供统一的接口来访问这些存储。...

    linux下C语言函数手册

    7. **内存管理**:包括动态内存分配(malloc, calloc, realloc, free)以及内存对齐的相关知识。 8. **I/O流**:讲解stdio流的概念,如标准输入输出流(stdin, stdout, stderr)和自定义流的创建。 9. **系统调用*...

    linux下内存管理

    本资料包聚焦于Linux下的内存管理,提供了深入的学习材料,旨在帮助读者理解和掌握这一关键领域。 Linux内存管理主要包括以下几个方面: 1. 物理内存(Physical Memory):Linux系统中的物理内存是指计算机硬件上...

    Linux内存管理编程技术.doc

    通过这样的实践,学生不仅理解了内存分配的抽象层,还了解了操作系统如何在硬件层面管理内存,这对于提升他们的系统级编程能力至关重要。 总结来说,这个实验涵盖了Linux内存管理的基本概念,包括malloc()函数的...

Global site tag (gtag.js) - Google Analytics