首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么malloc分配的字节数与请求的数不同?

在计算机编程中,malloc 是一个用于动态分配内存的函数。当程序员请求分配一定字节数的内存时,malloc 可能会分配更多或更少的字节数,这取决于底层的内存管理系统。

malloc 分配的字节数与请求的数不同的原因有以下几点:

  1. 内存对齐:为了提高内存访问效率,malloc 可能会将请求的字节数向上或向下对齐。例如,如果请求分配 5 字节,但内存对齐规则要求每个内存块至少是 8 字节的倍数,那么 malloc 可能会分配 8 字节或更多。
  2. 内存管理器的开销:内存管理器需要在分配的内存块中保留一些额外的信息,例如内存块的大小、空闲/已用标记等。这些额外的信息会占用一定的字节数,导致分配的字节数与请求的数不同。
  3. 内存碎片:由于内存分配和释放的过程中可能会产生内存碎片,内存管理器可能会将连续的内存块合并为一个更大的内存块。这样,即使程序员请求的是相同大小的内存块,malloc 分配的字节数也可能不同。
  4. 操作系统的限制:操作系统可能会对内存分配的最小单位和最大单位施加限制。例如,如果请求分配 1000 字节,但操作系统的最小分配单位是 4KB,那么 malloc 将分配 4KB 的内存。
  5. 内存池:在某些情况下,程序可能使用内存池来管理内存。内存池是一块预先分配好的内存区域,程序可以从中请求内存。这种情况下,malloc 分配的字节数可能与请求的数不同,因为内存池的大小和管理方式可能与操作系统的内存管理方式不同。

总之,malloc 分配的字节数与请求的数不同是由于内存对齐、内存管理器的开销、内存碎片、操作系统的限制以及内存池等多种原因。为了减少这种情况的发生,程序员可以使用内存分析工具来检测内存泄漏和碎片,并优化代码以减少内存分配次数和请求大小。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么RGB CMYK差异,会有所不同

RGB CMYK 有什么区别 RGB 颜色模式用于设计网站和电视等数字通信。CMYK 颜色模式用于设计印刷通讯,如名片和海报。 这只是简单区别。...如果您有兴趣了解更多关于为什么这种差异很重要信息,请继续阅读。 什么是RGB RGB 就是看光 计算机屏幕以不同红、绿和蓝光组合显示图像、文本和设计中颜色。这就是 RGB 来源。...这些子像素根据像素最终显示颜色以不同强度点亮,以在黑色监视器上产生结果。 您正在阅读本文屏幕由数百个像素组成。这些像素聚集在一起以显示您看到文字和图像。...在 CMYK 模式下将颜色加在一起对结果影响 RGB 相反;添加颜色越多,结果越暗。因此,颜色会被去除或减去,以创造出明亮效果。...使用黑色时,设计师使用了几种不同版本,它们不会在您项目中留下一个洞。 酷黑:60。0 . 0 . 100 暖黑:0。60 . 30 . 100 设计师黑色:70。

1.6K20

使用Python内置模块函数进行不同进制转换

这篇文章主要介绍了使用Python内置模块函数进行不同进制转换方法,Python也使得读取纯二进制文件内容非常方便,需要朋友可以参考下 binascii 模块: 它包含一个把二进制数值转换成十六进制函数...int('10', 8) 8 <type, int int('20', 10) 20 <type, int int('20',16) 32 <type, int 字符数字转换函数...img12517165556.png', 'rb') a = fh.read() #print 'raw: ',`a`,type(a) hexstr = binascii.b2a_hex(a) #得到一个16进制...,是不是有点黑客帝国赶脚啊,呵呵 ?...到此这篇关于使用Python内置模块函数进行不同进制转换文章就介绍到这了,更多相关Python不同进制转换内容请搜索ZaLou.Cn以前文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn

81420

在C中,如何知道动态分配是否成功

mallco是分配虚拟内存 C语言使用 malloc函数动态在堆上分配内存。malloc根据字节数参数。如果无法分配内存,该函数将返回指向已分配内存指针或 NULL 指针。...执行“malloc(x)”占用 x 字节物理内存不同。因此,依靠 malloc 确定分配是否成功是一个困难问题。只有在写入和读取新分配内存时才能发现。...如果没有足够物理内存来满足您请求,mlock() 将失败。 ---- 嵌入式为什么不执行malloc 这就是为什么某些嵌入式系统不执行 malloc 原因。...没有内存泄漏,不需要解决“是否存在动态内存分配将失败执行路径” NP 完全问题。它不仅动态分配内存总量有关,还与分配(和释放)顺序有关。...,内存不足killer可能会在进程尝试真正访问过度分配虚拟内存时选择杀死一个*不同*进程,并且C 共享库可能不会*真正* 释放 free() 内存,因为在下次尝试 malloc() 时保留它以避免访问内核会更快

2.7K20

干货——聊聊内存那些事(基于单片机系统)

标准库中定义了默认堆大小为0x200=512字节,其可以认为程序同一时间malloc分配大小不可大于512字节数据。...查看解释: 如果用malloc(n)来分配堆内存,那么分配内存比n大,为什么呢?...存在几个问题: Malloc分配空间总共可以有512,但分1包也只能是500左右有效空间,分8包是400左右有效空间,利用率为什么这么低?...碎片化测试时,p[2]、p[3]、p[4]大小应该是3*50=150,结果最大可以是160左右。 查看解释: 如果用malloc(n)来分配堆内存,那么分配内存比n大,为什么呢?...: 将间隔小内存移动到一起并排,释放连续空间 现在普遍采用段页式内存分配方式就是将进程内存区域分为不同段,然后将每一段由多个固定大小页组成。

76910

分享丨CC++内存管理详解--堆、栈

管理方式不同   (2). 空间大小不同   (3). 能否产生碎片不同   (4). 生长方向不同   (5). 分配方式不同   (6)....通过重载new 和 delete 操作符方法,你可以自由地采用不同分配策略,从不同内存池中分配不同类对象。 为单个类重载new[]和delete[] 必须小心对象数组分配。...有了malloc/free为什么还要new/delete mallocfree是C++/C语言标准库函数,new/delete是C++运算符。它们都可用于申请动态内存和释放内存。...既然new/delete功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?...* malloc函数本身并不识别要申请内存是什么类型,它只关心内存字节数。我们通常记不住int, float等数据类型变量的确切字节数

98821

完全合并C++面试题

又一次分配到2K if (NULL == p) return; … } A: p = malloc(1024); 应该写成: p = (char *) malloc(1024);...五、sizeof主要用途    1、sizeof操作符一个主要用途是存储分配和I/O系统那样例程进行通信。...空缺字节VC会自己主动填充。同一时候VC为了确保结构大小为结构字节边界(即该结构中占用最大空间类型所占用字节数倍数,所以在为最后一个成员变量申请空间后。...,总占用空间大小为:8+1+3+4=16,刚好为结构字节边界(即结构中占用最大空间类型所占用字节数sizeof(double)=8)倍数,所以没有空缺字节须要填充。...这样情况要注意不同系统系统或者不同编译器得到结果可能是不同。比如int类型在16位系统中占2个字节,在32位系统中占4个字节。 B. 參为数组或指针。以下举例说明.

35520

C语言之malloc函数「建议收藏」

malloc 只管分配内存,并不能对所得内存进行初始化,所以得到一片新内存中,其值将是随机。...和 new 至少有两个不同: new 返回指定类型指针,并且可以自动计算所需要大小。...而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型指针。...调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要内存块。然后,将该内存块一分为二(一块大小用户请求大小相等,另一块大小就是剩下字节)。...于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻小空闲块合并成较大内存块。

79020

malloc函数具体解释

malloc.h 内容是全然一致。)...三、mallocnew不同点   从函数声明上能够看出。malloc 和 new 至少有两个不同: new 返回指定类型指针,而且能够自己主动计算所须要大小。...= new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100; 而 malloc 则必须由我们计算要字节数,而且在返回后强行转换为实际类型指针...总结: malloc()函数事实上就在内存中找一片指定大小空间,然后将这个空间首地址范围给一个指针变量,这里指针变量能够是一个单独指针,也能够是一个数组首地址,这要看malloc()函数中參...我们这里malloc分配内存空间在逻辑上连续,而在物理上能够连续也能够不连续。对于我们程序猿来说,我们关注是逻辑上连续,由于操作系统会帮我们安排内存分配,所以我们使用起来就能够当做是连续

57720

当Linux用尽内存

A比B分配了更多内存。而且B被杀掉更早一些。两个程序都因为没有可用内存而退出。更准确说,A因为失败malloc()而优雅退出了,B是被OOM杀手干掉了。 首先观察分配内存块。...如果另外一个malloc()请求尺寸小于等于自由chunk。分配器可以把多个连续自由chunk合并,也 可以把它分割来满足要求。 这也就是说,一个自由chunk可能因为不能用来满足请求而被丢弃。...badness()调用发生在页分配函数中,当只有少数自由页而回收失败时,所以基本上这个值很接近进程拥有的页数。 为什么实际页数呢?因为这样需要更多时间和更多锁,也导致快速判断开销增大。...程序结束时会报告系统分配内存字节数(内核和glibc分配器)以及实际使用数量。...关于其他内存分配实验 不同分配器使用不同方法管理内存chunk。Hoard是一个例子。

5K31

【C++】探索C++内存管理:机制揭秘内存安全

sizeof和strlen是C语言中两个不同操作符/函数,它们功能和用法有所不同: sizeof是一个操作符(也可以看作是编译时关键字),用于获取数据类型或变量在内存中所占字节数。...1.malloc函数用于分配指定字节数内存空间;calloc函数用于分配指定数量、指定大小连续内存空间,并可将分配内存空间进行初始化;realloc函数用于重新分配已经分配内存空间大小。...2.malloc函数用于在堆上动态分配内存空间,其实现原理可以简要概括为以下步骤: 首先,malloc函数会接收用户请求内存大小,并计算需要分配总内存大小(包括额外管理信息)。...如果找到了足够大空闲块,即该块大小大于等于请求内存大小,malloc函数会将该空闲块从空闲链表中移除,并返回该块起始地址给用户。...如果没有足够大空闲块,malloc函数会请求操作系统分配更多内存空间。操作系统会分配一块更大内存区域,并将其划分成一个新空闲块,返回给malloc函数。

12810

realloc函数和malloc函数解析

realloc函数和malloc函数都是用来动态分配内存函数,但是它们有一些区别。 1.使用方法 malloc函数用于分配指定字节数内存空间,并返回指向这段内存指针。...其函数原型为: void *malloc(size_t size); 其中,size是要分配内存空间字节数malloc函数返回指针类型为void*,需要根据需要进行类型转换。...malloc(sizeof(QNode)): 调用malloc函数分配了一块大小为QNode类型内存空间。sizeof(QNode)用来获取QNode类型数据占用字节数。...2.功能不同malloc函数用于分配指定大小内存块,并返回指向该内存块指针。 realloc函数用于重新分配分配内存大小。...如果分配成功,该指针可能与原内存块指针相同或不同。 5.用途不同malloc函数通常用于分配初始大小内存块,比如数组、结构体等。

9010

CC++面试必备知识

首先讲一下声明定义, 声明不等于定义,声明只是指出了变量名字,并没有为其分配存储空间;定义指出变量名字同时为变量分配存储空间,定义包含了声明。extern是用来声明全局变量。...c语言内存分配方式 从静态存储区域分配:由编译器自动分配和释放,在程序编译时候就已经分配好内存,这块内存在程序整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量static变量。...2.全局静态变量 从静态存储区域分配,其生命周期也是整个程序同在,从程序开始到结束一直起作用。全局变量不同是,全局静态变量作用域只在定义它一个源文件内,其他源文件不能使用。...,所以不同声明顺序导致了结构体所占空间不同。...共用体 根据实际情况,有时需要把几种类型不同数据,如一个整型变量、一个字符变量、一个实型变量存放在起始地址相同同一段存储单元种。这三个变量在内存种所占字节数不同,但都从同一个地址开始存放。

21130

C++ 中 mallocfree newdelete区别

本文主要从以下5各方面比较、分析 malloc/free,new/delete 区别 。 1.自动地分配所需空间。2.自动返回指针类型。3.初始化不同。4.源码实现不同。...malloc/free 是 C++/C 语言标准库函数 ——本质区别; 操作对象范围不同 new/delete 是 C++ 里才有的,而 new/delete malloc/free 一个显著区别在于...2、malloc 函数本身并不识别要申请内存是什么类型,它只关心内存字节数。...因此,C++语言需要一个能完成动态内存分配和初始化工作运算符new,以及一个能完成清理释放内存工作运算符delete。new/delete不是库函数,而是运算符。...而对于内部数据类型,由于内部数据类型对象没有构造函数析构函数过程,对他们来说,malloc/freenew/delete是等价

91320

c语言中malloc作用,malloc函数-malloc函数,详解

//返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100; 而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型指针。...malloc分配空间,是指系统按照你程序在内存堆栈中分配一段内存给你,而该内存段首地址赋值给你p,这是基本指针概念,为什么要强调这个?...而p可以任意偏移,可以便宜出分配内存段,比如*(p+11),你可以打印这个值,有个随机,这意味着你可以p可以任意移动,但却是非法,因为你偏离了给你分配那个合法空间。...,那么如果不用free去释放这个内存空间,那么在函数结束前静态分配空间一样,也相当于只是静态分配空间了?...sizeof(int *)返回int *类型长度(也就是整型指针长度) 那整型指针整型用在sizeof中就不同了?

2.1K30

【重拾C语言】十三、动态数据组织(一)动态变量(malloc、calloc、realloc、free)

下面简要介绍这些函数作用: malloc函数 用于分配指定字节数内存空间,并返回一个指向该内存空间指针。...语法如下: void* malloc(size_t size); `size`参数是要分配字节数。...`用于获取`int`类型变量所占字节数,然后`malloc`函数根据这个大小分配相应内存空间。...注意: `malloc`函数返回指针类型是`void*`,需要进行类型转换才能赋值给其他类型指针 `malloc`函数只分配内存空间,并不对其进行初始化。...calloc函数 用于分配指定数量和大小连续内存空间,并返回一个指向该内存空间指针。malloc不同是,calloc函数会将分配内存空间清零,即将所有位都设置为0。

12510
领券