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
分享到:
相关推荐
在本实验中,我们主要探讨了Linux虚拟内存管理的原理、动态内存操作函数的使用,以及如何检测主存使用情况。 首先,Linux内存管理采用虚拟内存技术,将每个进程的地址空间划分为多个区域,如堆、栈、代码段、数据段...
Linux下的内存映射函数mmap详解及示例代码.pdf 本文档将详细介绍Linux下的内存映射函数mmap,包括其概念、实现机制、示例代码等方面的内容。 mmap概念 mmap是Linux操作系统中的一种内存映射机制,可以将文件映射...
### Linux源代码分析之内存管理 #### 摘要与关键词 本文档是对Linux内核内存管理系统的一个深入分析,特别是针对其源代码进行了详细的解读。Linux的内存管理是内核中最复杂的部分之一,它涉及到了内存初始化、地址...
它不仅为学习者提供了一个实践平台,还加深了对Linux内核如何高效管理内存资源的理解。通过对代码的深入研究,学习者可以进一步探索更复杂的内存管理策略,如分页、分段和多级缓存机制,以及它们在现代操作系统中的...
Linux下的内存映射函数mmap详解及示例代码 Linux下的内存映射机制mmap是Linux内核中的一种机制,允许进程将文件映射到自己的地址空间中,从而实现文件I/O操作。该机制是基于虚拟存储(Virtual Memory,VM)概念的,...
Linux 采用了伙伴系统算法来管理内存,通过将内页按 2^0, 2^1, 2^2…2^10 大小进行分组,每次分配内存时,从相应大小的池中分配内存,然后再把余下的内存分配给它的下一级缓存池。 在 Linux 内核中,大内存分配的...
4. 管理内存池:为了高效地管理内存块,通常会使用链表、哈希表或者位图等数据结构来记录内存块的状态(如空闲/已分配)。 在C或C++中实现内存池,可以自定义数据结构和接口,例如`alloc`和`free`函数。同时,为了...
Linux内核中的内存管理是一个复杂的主题,涉及多个层面的操作。本篇将详细介绍Linux内核中...在编写驱动程序或者进行内核开发时,合理地使用这些内存操作函数能够帮助我们更好地管理内存资源,提高程序的性能和效率。
在Linux操作系统中,`memset`是一个非常常用的C库函数,用于将一块内存区域填充为特定的字节值。它的原型如下: ```c ...在遇到段错误时,深入理解Linux内存管理和程序执行的上下文是非常重要的。
Linux提供malloc和free函数供程序员分配和释放内存,实际上这些操作是由内存管理子系统处理的。内存分配可能涉及到匿名页(无文件映射的内存)和文件映射页(与磁盘文件关联的内存)。对于匿名页,Linux可能会使用...
3. **内存管理函数**:如`malloc`、`calloc`、`realloc`用于动态分配内存,`free`则用于释放内存。理解这些函数的工作原理对于避免内存泄漏至关重要。 4. **字符串处理函数**:如`strcpy`、`strcat`、`strcmp`、`...
Linux内核内存管理是操作系统中极为重要的一个部分,它涉及到操作系统如何高效、合理地使用物理内存资源以及虚拟内存资源。Linux内核内存管理机制包括页面类型与组织、页面回收逻辑、内存区域划分、页面分配策略、...
本文提出了一种面向函数的动态内存泄漏检测方法,该方法关注于在Linux环境下对内存泄漏进行更精确的追踪和分析。 内存泄漏通常发生在程序分配动态内存后,未能在不再需要时释放它。虽然小型程序可能不会立即受其...
在Linux操作系统中,内存管理是核心功能之一,它关乎到系统的稳定性和性能。Linux0.11是一个早期版本的Linux内核,虽然相对简陋,但它的内存管理系统为我们理解现代Linux内核提供了基础。本节将深入探讨Linux0.11...
本实验旨在帮助你深入理解Linux环境下的内存管理机制,主要包括内存映射(mapping)和解除映射(unmapping),以及如何在内存中打开和读取文件。 一、Linux内存映射 内存映射是Linux提供的一种机制,允许将文件或...
内存对象(Memory Object)是指内存区与后备存储之间的映射,Linux系统使用虚拟存储(Virtual Memory)机制来管理内存对象,虚拟存储机制可以将不同的后备存储统一处理,并提供统一的接口来访问这些存储。...
7. **内存管理**:包括动态内存分配(malloc, calloc, realloc, free)以及内存对齐的相关知识。 8. **I/O流**:讲解stdio流的概念,如标准输入输出流(stdin, stdout, stderr)和自定义流的创建。 9. **系统调用*...
本资料包聚焦于Linux下的内存管理,提供了深入的学习材料,旨在帮助读者理解和掌握这一关键领域。 Linux内存管理主要包括以下几个方面: 1. 物理内存(Physical Memory):Linux系统中的物理内存是指计算机硬件上...
通过这样的实践,学生不仅理解了内存分配的抽象层,还了解了操作系统如何在硬件层面管理内存,这对于提升他们的系统级编程能力至关重要。 总结来说,这个实验涵盖了Linux内存管理的基本概念,包括malloc()函数的...