malloc是如何分配内存的

简介: malloc作为C语言里的一个重要的关键字,分配的内存空间真的就是传入的数字的大小吗,本期将一起共同探讨malloc里的一些不为人知的细节。

1.malloc是如何分配内存的?

根据分配内存大小的不同分配内存的方式也不同。

(1)如果用户分配的内存小于128KB,则通过brk()(将堆顶指针向高地址移动,获得新的内存空间)申请内存。

(2)如果用户分配的内存大于128KB,则通过mmap()(从文件映射区偷一块内存)申请内存。


2.malloc分配的是物理内存吗?

不是,分配的是虚拟内存,只有当该内存被访问的时候才会尝试去分配物理内存。


3.malloc(1)到底会分配多大的虚拟内存?

malloc()在分配内存的时候,并不是老老实实按用户预期申请的字节数来分配内存空间大小,而是会按预期更大的空间作为内存池,且内存池的大小与malloc使用的内存管理器有关系。

相关文章
|
2月前
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
127 26
|
10月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
879 13
|
11月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
529 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
11月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
193 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
11月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
2038 1
|
11月前
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
205 0
|
程序员 C++
malloc与free的内存管理奥秘:技术分享
【8月更文挑战第22天】在软件开发过程中,内存管理是一个至关重要的环节。特别是在使用C或C++这类语言时,程序员需要手动管理内存的分配与释放。malloc和free函数是这一过程中的核心工具。本文将深入探讨malloc如何分配内存,以及free如何知道释放多少内存,帮助你在工作学习中更好地掌握这一技术干货。
292 4
|
关系型数据库 MySQL
MySQl优化:使用 jemalloc 分配内存
MySQl优化:使用 jemalloc 分配内存
|
存储 算法 安全
实现一个malloc内存分配器
需要注意的是,这个例子是一个非常简单的实现,它只是为了演示原理,对于一个强壮的、用于生产环境的内存分配器来说还远远不够。一个成熟的分配器将考虑到多线程的同步、更复杂的内存分配算法、碎片整理策略、错误处理,以及安全性问题,比如防止缓冲区溢出。在实际应用程序中,你应该使用标准库提供的或操作系统提供的内存分配器,除非你确实需要并且能够处理自己实现内存分配器所带来的复杂性。
139 3
|
存储 缓存 算法
(五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析
在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内。而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程、Java对象在内存中的布局以及对象引用类型。
458 8