`
haoningabc
  • 浏览: 1475007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

malloc和calloc,balloc区别

    博客分类:
  • c
阅读更多
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;如果你是为指 针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零
分享到:
评论

相关推荐

    malloc和calloc区别

    ### malloc和calloc的区别 在C语言中,动态内存分配是一项重要的功能,它允许程序在运行时根据需求分配或释放内存。`malloc` 和 `calloc` 是两种常用的内存分配函数,它们均定义在 `&lt;stdlib.h&gt;` 头文件中,用于动态...

    malloc和calloc的区别

    ### malloc与calloc的区别详解 #### 一、概述 在C语言中,动态内存分配是非常重要的一个环节,它允许程序员在运行时根据需求分配和管理内存。`malloc` 和 `calloc` 是两个常用的内存分配函数,它们都属于标准...

    xin\malloc和calloc区别

    标题与描述核心知识点详解:`xin\malloc和calloc区别` 在C语言中,动态内存管理是程序员必须掌握的重要技能之一,而`malloc`和`calloc`则是实现这一目标的两个关键函数。它们允许程序员在运行时请求特定大小的内存...

    malloc,realloc,calloc的总结.xlsx

    个人总结各类博客和资料里关于malloc,calloc,realloc的对比

    利用数组模拟C语言malloc/calloc

    利用C语言进行模拟实现calloc/malloc的方程,可以更好的学习C语言内存管理,

    calloc和malloc的区别

    在C语言编程中,内存管理是一项关键任务,`malloc`和`calloc`是两个常用的动态内存分配函数。它们都属于C标准库中的`stdlib.h`,用于在程序运行时为变量分配内存空间,但它们之间存在着一些显著的区别。 首先,`...

    C语言中 malloc,calloc,realloc的区别

    C语言中 malloc、calloc、realloc的区别 (1)C语言跟内存分配方式 从静态存储区域分配.  内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量. 在栈上创建  在执行...

    C语言malloc()与 calloc()的区

    本文将详细介绍C语言中两种常用的动态内存分配函数:`malloc()` 和 `calloc()`,并探讨它们之间的区别。 #### malloc() 函数 `malloc()` 函数用于在程序运行期间动态地分配指定大小的内存块。它的原型定义如下: ...

    Malloc和new区别

    ### Malloc和New的区别 #### 一、基本概念与功能 **Malloc** 与 **Free** 是 C/C++ 语言中的标准库函数,主要用于动态内存的分配与释放。这两个函数定义在 `&lt;cstdlib&gt;`(或 `&lt;malloc.h&gt;`)库中。 **New** 与 **...

    malloc 与new的区别

    而C++则通过关键字new和delete来实现这一功能,它们与C语言中的malloc和free既有相似之处也有明显的区别。本文将对malloc和new的区别进行详细解读,包括它们的属性、参数、返回类型、自定义类型处理、内存区域、分配...

    malloc和new的区别

    malloc和new的区别 malloc和new是两种不同的动态内存分配方式,都是用于申请和释放内存的,但它们有着不同的机制和用途。malloc是C语言的标准库函数,而new是C++的运算符,两者都可以用于申请动态内存和释放内存,...

    lwmem:用于具有内存限制的嵌入式系统的轻型动态内存管理器库。 它实现了malloc,calloc,realloc和free函数

    lwmem 库提供了核心的动态内存分配功能,包括malloc、calloc、realloc和free,这些都是C语言编程中常用的内存操作函数。 1. **malloc**:malloc函数是动态内存分配的核心,它根据传入的字节数来分配一块连续的内存...

    sbrk(),mmap(),malloc(),calloc()的异同

    为了理解 Linux 的内存管理机制,我们需要了解几个关键的系统调用和函数,包括 sbrk(), mmap(), malloc(), calloc() 等。这篇文章将详细解析这些函数的异同,及其在 Linux 内存管理机制中的角色。 首先,让我们从 ...

    C/C++: Inline function, calloc 对比 malloc

    接下来,我们来看malloc和calloc的区别。这两个函数都属于C标准库中的`stdlib.h`,用于动态分配内存。 malloc函数的基本形式是`void* malloc(size_t size)`,它接受一个参数,即所需分配的字节数,然后返回一个指向...

    c语言中malloc、realloc与calloc 的区别以及联系

    在C语言中,内存管理是程序员需要关注的重要部分,其中malloc、realloc和calloc是三个常用的动态内存分配函数。...正确使用malloc、calloc和realloc,以及了解它们潜在的风险和优化方法,是每个C程序员必备的知识。

    Malloc等函数的注意事项.pdf

    本文主要讨论了几个关键的C标准库函数,包括malloc、free、calloc和memset,它们用于堆内存的分配、初始化、释放和填充。 1. **malloc函数**: malloc函数允许程序在运行时动态地分配内存。它从堆中分配`n`字节的...

    C语言的malloc和free函数.pdf

    当使用free释放内存时,程序员必须确保传入的ptr是之前通过malloc、calloc或realloc函数获得的指针。如果ptr为NULL,调用free函数不会有任何效果。释放内存的一个典型操作如下: ```c free(pc); ``` 这行代码将...

    new与malloc 的区别和用法

    在C++编程中,`new`和`malloc`都是用于动态内存分配的工具,但它们在使用和功能上有显著的区别。下面将详细阐述这些差异。 首先,`new`和`delete`是C++中的运算符,而`malloc`和`free`是C/C++标准库中的函数。`new`...

Global site tag (gtag.js) - Google Analytics