malloc和calloc,balloc区别

balloc是新东西吗?apue上没有

三个函数的声明分别是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
都在stdlib.h函数库内

它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL

malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
char* p;
p=(char*)malloc(20);

calloc与malloc相似,参数elsize 为申请地址的单位元素长度,nelem为元素个数,如:
char* p;
p=(char*)calloc(20, sizeof(char));  
这个例子与上一个效果相同

realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度< type="text/javascript"> < src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> 



< type="text/javascript"> < src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> 
如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);

注意,这里的空间长度都是以字节为单位。


C语言的标准内存分配函数:malloc,calloc,realloc等。
malloc与calloc的区别为1块与n块的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域, 每一位都初始化为零,返回首地址。
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。

free的调用形式为free(void*ptr):释放ptr所指向的一块内存空间。
C++中为new/delete函数。


----------------------------------------------------------------------------------------------------------------------
网上找到的英文解释如下:
Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from the other.

Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from the other. malloc() takes a size and returns a pointer to a chunk of memory at least that big:
void *malloc( size_t size );
calloc() takes a number of elements, and the size of each, and returns a pointer to a chunk of memory
at least big enough to hold them all:
void *calloc( size_t numElements, size_t sizeOfElement );
There are one major difference and one minor difference between the two functions. The major difference is that malloc() doesn't initialize the allocated memory. The first time malloc() gives you a particular chunk of memory, the memory might be full of zeros. If memory has been allocated, freed, and reallocated, it probably has whatever junk was left in it. That means, unfortunately, that a program might run in simple cases (when memory is never reallocated) but break when used harder (and when memory is reused). calloc() fills the allocated memory with all zero bits. That means that anything there you are going to use as a char or an int of any length, signed or unsigned, is guaranteed to be zero. Anything you are going to use as a pointer is set to all zero bits.
That is usually a null pointer, but it is not guaranteed.Anything you are going to use as a float or double is set to all zero bits; that is a floating-point zero on some types of machines, but not on all.
The minor difference between the two is that calloc() returns an array of objects; malloc() returns one object. Some people use calloc() to make clear that they want an array. 

下面是网上的中文说明

用malloc()函数更好还是用calloc()函数更好


函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。

malloc()函数有一个参数,即要分配的内存空间的大小:

void*malloc(size_tsize);

calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。

void*calloc(size_tnumElements,size_tsizeOfElement);

如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。

函数malloc()和函数calloc() 的主要区别是前者不能初始化所分配的内存空间,而后者能。如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之, 如果这部分内存曾经被分配过,则其中可能遗留有各种各样的数据。也就是说,使用malloc()函数的程序开始时(内存空间还没有被重新分配)能正常进 行,但经过一段时间(内存空间还已经被重新分配)可能会出现问题。

函数calloc() 会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指 针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零
执行HDevelop项目 这一节,我们讲述的是如何用HDevEngine加载和执行一个HDevelop项目。代码部分来源于示例程序exec_program(源文件exec_program.cpp),检测塑料零件边界上的毛刺。1.Step 1:初始化首先,我们包含HALCON/C++和HDevEngine头文件以及命名空间。注意到在这个示例程序中,HDevEngine头文件已经包含在my_hdevoperatorimpl中,所 阅读详情

相关推荐

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

balloc.c分析(一)

2021SC@SDUSC balloc.c是和block分配有关的文件,block和inode是文件系统最基础的部分,所以balloc.c会涉及很多底层内容。 在文件的开始定义了一个宏,用来判断参数b是否在参数(first)-(first+len-1)这段内存中。 #define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1) 下...

weixin_45742312的博客 734

Ubuntu环境下rknn-toolkit2的安装与兼容性解析

本文详细解析了在Ubuntu系统上安装瑞芯微rknn-toolkit2工具链的完整流程与关键注意事项。文章重点剖析了rknn-toolkit2与旧版rknn-toolkit的核心兼容性问题,强调两者在API、模型格式及运行时库上互不兼容,并推荐使用Conda虚拟环境进行隔离管理,为RK3566、RK3588等开发板的AI模型部署提供清晰的实践指南。

weixin_29041767的博客 375

Linux 系统调用

引言 本文整理了 Linux 内核中系统调用的相关知识。 系统调用实现 既然前面在介绍缺页异常的时候引到了系统调用的知识,这里我们就紧接着介绍一下 Linux 的系统调用。从某种角度来看,可以将内核视作个综合性的库,它包含了各种可向用户层应用程序提供的功能。系统调用是应用程序与该库之间的接口。通过调用系统调用,应用程序可以向内核请求一个服务,内核接下来满足该请求。 设计基础 基本上,我们都是通过标准库来开发自己的软件,标准库提供了各种基本函数,这些基本函数下层可能就是组合了数个系统调用。因为通用编程语言正

贝克街的流浪猫 398

基于STM32的多模态智能风扇控制系统设计与实现

本文详细介绍了基于STM32单片机的多模态智能风扇控制系统的设计与实现。系统集成了红外遥控、蓝牙手机控制及人体感应等多模态交互方式,通过PWM技术实现无级调速,并设计了安全优先的控制逻辑。文章从硬件选型、核心原理、软件编程到系统调试,提供了完整的实战指南,适合嵌入式开发爱好者学习与实践。

weixin_28285943的博客 238

手把手教你利用qemu搭建银河麒麟V11 arm环境

在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。

huanhuanzhou blog 2455

完美解决printf,sprintf导致stm32进hardfault问题。

完美解决printf,sprintf,vsnprintf导致stm32进hardfault问题。 原因: 由于原来的标准库对于嵌入式开发兼容性不好,会导致在底层的_Balloc函数在处理地址时出错导致hardfault。网上有人说字节对齐之类的解决方法也是为了处理地址这个问题。 解决方法 迁移这个库进代码里面,替代掉原来标准库自带的printf即可。 (库的作者不是我,我只是恰好发现了这个) https://github.com/mpaland/printf 另外 为了防止新手看不懂或者不懂使用,特地写个教

weixin_46438614的博客 4606

解决anaconda占用C盘空间过多问题

anaconda就算安装在其他盘,默认会把索引、锁定文件、压缩包等都放到系统盘(C盘),我用了两年,占用30GB。 1. 卸载不用的虚拟环境 查看已安装的虚拟环境 conda env list 卸载不用的、过期的虚拟环境 conda remove -n (要卸载的环境的名字) --all 2. 删除索引缓存、锁定文件、未使用过的包和tar包 conda clean -a 清理完之后,删除了15GB,还剩15GB,舒服了 ...

沉迷单车的追风少年 3万+

[OS] A4-前菜介绍

目标任务修改文件系统的 inode 结构,增加对双重间接块的支持,从而提升文件系统的最大文件大小到 65803 块。额外加分任务在双重间接块的基础上实现三重间接块,进一步提升文件系统的支持能力。如需详细信息,可参阅《xv6-book》第 8.10 节。根据以上提示和定义,代码中提供了修改后的结构,请仔细阅读代码中的注释。宏定义解释直接块的数量从12 减少到 11。这是因为第 12 个直接块的位置被牺牲,改为存储双重间接块指针。表示单重间接块中可以存储的块指针数量。,即。

m0_74331272的博客 1209

[Python + UG NX 二次开发新手教程] 第五课 采用Python / UF 开发模式

在 NX 二次开发里看到的“UF”是的缩写,它是 Siemens 提供的集合,也是整个 NX Open 体系里最贴近内核、历史最悠久的一套接口。相当于 NX 的“系统调用”——只要 NX 能做的事,UF 几乎都能调得动。Siemens 从 NX 12 开始把原来的 C 接口(UF)全部打包进了官方 Python 模块,命名空间为 NXOpen.UF.*,所以只要 NX 安装目录里带了 NXOpen\UF 子模块,就能在 Python 里直接调用 UF 函数。

温良 1004

PentAGI自动渗透测试平台搭建与使用

但是PentAGI的缺陷也比较明显,一个是自动化程度高带来过程的介入困难,整个渗透的过程都交给AI自动决策,无法进行人工调整,耗时较长;从上述过程来看PentAGI似乎是一个比较“可用”的AI自动化渗透测试平台,但是在继续等待测试的过程中,PentAGI的一些缺点也暴露了出来,一个是测试的过程非常漫长,因为PentAGI是使用配置大模型API key的方式全自动运行,支持openai、deepseek等主流LLM大模型,过程中不需要人工介入,会不断自动调整,所以比较依赖于大模型本身的响应速度。

墨痕诉清风的博客 2403

balloc.c分析(二)

2021SC@SDUSC ext2_try_to_allocate的作用是尝试在给定的范围内分配块,参数group为给定的分配块组,grp_goal是给定组内的目标块,count是分配的块的目标数量。首先设置块的分配范围start到end,然后如果我们有一个窗口,我们在预留窗口内进行分配重设start和end的值,并且判断grp_goal是否在分配范围中,不在则grp_goal设为-1。然后判断grp_goal是否小于0,是则调用find_next_usable_block在分配范围中找到一...

weixin_45742312的博客 894

汽车IVI中控开发入门及进阶(47):CarPlay开发

车载信息娱乐(IVI)系统已经从仅仅播放音乐的设备发展成为现代车辆的核心部件。除了播放音乐,IVI系统还为驾驶员提供导航、通信、空调、电源配置、油耗性能、剩余行驶里程、节能建议和许多其他功能。​驾驶座逐渐变成了你家和工作场所之外的额外生活空间。2014年,苹果推出了Apple CarPlay,这是一款汽车界面,允许驾驶员使用iPhone应用程序和其他IVI功能,如苹果地图、Siri、苹果音乐、iMessage,并拨打电话。

码农17年的博客 1129

goahead源码分析---块内存分配--balloc.c文件

到目前为止,个人发现的goahead的一个特点: 1、函数执行过程中需要的缓冲区都不是由外部提供的,而是什么时候需要什么时候申请,用完后释放,如果申请的内存存放了调用者需要的信息,则将这块内存的地址通过参          数 传出去,同时由调用者负责释放。 2、在HTTP请求等地方频繁的进行了内存的申请和分配。 也许系统的malloc函数有种种缺点,goahead提供了自己的块内存

1979

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

xv6源码分析(四):内存管理

xv6通过页表机制实现了对内存空间的控制。页表使得 xv6 能够让不同进程各自的地址空间映射到相同的物理内存上,还能够为不同进程的内存提供保护。 除此之外,我们还能够通过使用页表来间接地实现一些特殊功能。xv6 主要利用页表来区分多个地址空间,保护内存。另外,它也使用了一些简单的技巧,即把不同地址空间的多段内存映射到同一段物理内存(内核部分),在同一地址空间中多次映射同一段物理内存(用户部分的每一

博客名被人看见不好 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【C语言】malloc()函数详解(动态内存开辟函数)

C语言库函数malloc()函数的功能,参数,返回值及具体使用详解.

C/C++领域,数据结构,linux,MySQl学习者 7万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

malloc函数

malloc函数动态分配数组,free释放内存 //动态数组 #include<stdio.h> #include<stdlib.h> //为malloc()和free函数提供原型 int main(void){ double * ptd; int max; int number; int i=0; puts("What is the maximum number of type double entries?"); scanf("%d",&max); ptd

qq_45895217的博客 1万+

ext2文件系统源代码之balloc.c文件解析

前面把ext2的acl.c和acl.h文件分析过了,今天来看一个比较重要的文件,就是balloc.c,这个文件是用来做块的分配方面工作的,在文件系统是属于较低层的,可能有点困难,我努力讲解的通俗一点,大家有什么问题欢迎提问啦。 /* 作者方面的信息 * linux/fs/ext2/balloc.c * * Copyright (C) 1992, 1993, 1994, 1995 * R

love coding 4319

【bzoj1828/Usaco2010 Mar】balloc 农场分配——贪心+差分+优先队列

Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i Output * 第一行: 一个整数表示最多能够被满足的要求数 Sample Input 5 4 1 3 2 1 3 1 3 2 5 2 3 4 5 Sampl...

weixin_30919429的博客 168

GoAhead2.5源代码分析之5-块分配模块(h.c和balloc.c)

h.c和balloc.c int hAlloc(void ***map) 功能:分配使用的map数组 说明: -----------------------------------------------------------------------------------------------------------------   int hFree(void ***map...

weixin_33738578的博客 273

malloc 函数详解

很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的。但是但是:一部分人还是将:malloc当作系统所提供的或者是C的关键字,事实上:malloc只是C标准库中提供的一个普通函数而且很多很多人都对malloc的具体实现机制不是很了解。1,关于malloc以及相关的几个函数      #include &lt;s...

wang13342322203的博客 27万+

malloc函数详解

一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释

xwdreamer的专栏 33万+

malloc函数详解以及例程

描述 C 库函数void *malloc(size_t size)分配所需的内存空间,并返回一个指向它的指针。 声明 下面是 malloc() 函数的声明。void *malloc(size_t size) 参数 size-- 内存块的大小,以字节为单位。 返回值 如果内存请求成功,则返回一个(void *)类型的指针。如果请求失败,则返回 NULL 提示:程序里一定要判断...

Somnus陳的博客 3986

c语言中realloc()函数解析

真是有点惭愧,这些内容本应该很早就掌握的,以前只是糊里糊涂的用,不知道在内存中具体是怎么回事,现在才弄清楚。 realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。 如果将分配的内存减少,realloc仅仅是改变索引的信息。 如果是将分配的内存扩大,则有以下情况: 1)如果当前内存段

成长的足迹 11万+

ralloc、calloc和malloc的用法、区别。实现原理

三个函数的声明: void *malloc(unsigned size); void *calloc(size_t n,size_t size); void *realloc(void *mem_address, unsigned int newsize);    三个函数都在文件中,其中void * 是万能指针,但是不能取值,一般需要什么数据类型,就用什么数据类型;若是全用void *,则可能

qq_34528825的博客 740

calloc()函数和malloc()函数

calloc(配置内存空间) 相关函数: malloc,free,realloc,brk 表头文件: #include <stdlib.h> 定义函数: void *calloc(size_t nmemb,size_t size); 函数说明: calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。 ...

weixin_30657999的博客 131
上一篇: valgrind使用
下一篇: 转 Linux SLUB 分配器详解
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值