malloc
分配内存块。
void *malloc(
size_t size
);
参数
- size
要分配的字节。
返回值
如果内存充足,则 malloc 返回无效的指针给分配的空间或 NULL。 若要返回指向类型的指针而不是 void,请对返回值使用类型转换。 返回值指向的存储空间保证适合储存任何类型的对象,该对象有一个相对于基本对齐方式,更少或同样的对齐方式要求。(Visual C++ 中,基础的对齐方式是 double 或 8 字节所需的对齐方式。 在面向 64 位平台的代码中,为 16 字节。)使用 _aligned_malloc 可为有更严格对齐要求的对象分配存储,例如 SSE 类型 __m128 和 __m256,以及使用 __declspec(align(n)) 进行申明的类型,其中 n 大于 8。 如果 size 为 0,malloc 将在堆中分配长度为零的项,并将有效指针返回到该项中。 即使请求的内存量很小,也要每次都检查 malloc 的返回。
备注
malloc 函数至少分配 size 位存储区域。 块大于 size 字节,这是由于对齐和维护信息需要空间。
如果内存分配失败,或者请求的内存数量超过 _HEAP_MAXREQ,那么 malloc 设置 errno 为 ENOMEM。 有关这和其他错误代码的信息,请参阅 errno、_doserrno、_sys_errlist 和 _sys_nerr。
启动代码使用 malloc 将存储分配给 _environ、envp 和 argv。 以下函数及其宽字符副本也调用 malloc。
|
|||
|
C++ _set_new_mode 函数为 malloc 设置新处理程序模式。 新的处理程序模式指示,在失败时,malloc 是否就像 _set_new_handler 设置的那样调用新的处理程序实例。 默认情况下,malloc 不调用发生故障的新处理程序例程去分配内存。 您可重写此默认行为,这样一来,当 malloc 无法分配内存时, malloc 调用新的处理程序例程,其方式与出于相同原因的 new 运算符的操作相同。 重写默认值、调用
_set_new_mode(1)
在您程序的早期,或链接到 NEWMODE.OBJ(请参阅 链接选项)。
当应用程序与调试版本的 C 运行时库连接时,malloc 解析为 _malloc_dbg。 有关在调试过程中如何托管堆的详细信息,请参阅 CRT 调试堆详细信息。
malloc 标记为 __declspec(noalias) 和 __declspec(restrict);这意味着函数保证不修改全局变量,和返回的指针不用做别名。 有关更多信息,请参见noalias和restrict。
要求
例程 |
必需的标头 |
---|---|
malloc |
<stdlib.h> 和 <malloc.h> |
有关其他兼容性信息,请参见兼容性。
库
C 运行时库的所有版本。
示例
// crt_malloc.c
// This program allocates memory with
// malloc, then frees the memory with free.
#include <stdlib.h> // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>
int main( void )
{
char *string;
// Allocate space for a path name
string = malloc( _MAX_PATH );
// In a C++ file, explicitly cast malloc's return. For example,
// string = (char *)malloc( _MAX_PATH );
if( string == NULL )
printf( "Insufficient memory available\n" );
else
{
printf( "Memory space allocated for path name\n" );
free( string );
printf( "Memory freed\n" );
}
}
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关详细信息,请参阅 平台调用示例。