mallocmalloc

Размещение блоков памятиAllocates memory blocks.

СинтаксисSyntax

void *malloc(
   size_t size
);

ПараметрыParameters

sizesize
Байты для размещения.Bytes to allocate.

Возвращаемое значениеReturn Value

Функция malloc возвращает указатель void на выделенное пространство или значение NULL , если объем доступной памяти недостаточен.malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. Чтобы получить указатель на тип, отличный от void , используйте приведение типа к возвращаемому значению.To return a pointer to a type other than void, use a type cast on the return value. Дисковое пространство, на который указывает возвращаемое значение, будет гарантированно соответствовать требованиям к выравниванию для хранения объектов любого типа, если таковые требования не превышают базовые.The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object that has an alignment requirement less than or equal to that of the fundamental alignment. (В Visual C++ основное выравнивание — это выравнивание, которое требуется для double , или 8 байт.(In Visual C++, the fundamental alignment is the alignment that's required for a double, or 8 bytes. В коде, ориентированном на 64-разрядные платформы, это 16 байт.) Используйте _aligned_malloc , чтобы выделить хранилище для объектов с более высоким требованием выравнивания, например типы SSE __m128 и __m256 , и типы, объявленные с помощью, __declspec(align( n )) где n больше 8.In code that targets 64-bit platforms, it’s 16 bytes.) Use _aligned_malloc to allocate storage for objects that have a larger alignment requirement—for example, the SSE types __m128 and __m256, and types that are declared by using __declspec(align( n )) where n is greater than 8. Если Размер равен 0, функция malloc выделяет элемент нулевой длины в куче и возвращает допустимый указатель на этот элемент.If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item. Всегда проверяйте возврат от malloc, даже если требуемый объем памяти мал.Always check the return from malloc, even if the amount of memory requested is small.

КомментарииRemarks

Функция malloc выделяет блок памяти размером не меньше байт.The malloc function allocates a memory block of at least size bytes. Блок может быть больше, чем Размер байтов, из-за пространства, необходимого для выравнивания и сведений об обслуживании.The block may be larger than size bytes because of the space that's required for alignment and maintenance information.

malloc переводится в еномем , если выделение памяти завершается ошибкой или объем запрошенной памяти превышает _HEAP_MAXREQ.malloc sets errno to ENOMEM if a memory allocation fails or if the amount of memory requested exceeds _HEAP_MAXREQ. Дополнительные сведения об этих и других кодах ошибок см. в разделе errno, _doserrno, _sys_errlist и _sys_nerr.For information about this and other error codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

Код запуска использует malloc для выделения памяти для переменных _environ, envp и argv .The startup code uses malloc to allocate storage for the _environ, envp, and argv variables. Следующие функции и их аналоги в расширенных символах также вызывают функцию malloc.The following functions and their wide-character counterparts also call malloc.

Функция _set_new_mode C++ задает новый режим обработчика для malloc.The C++ _set_new_mode function sets the new handler mode for malloc. Новый режим обработчика указывает, что в случае сбоя malloc вызывает новую подпрограммы обработчика, заданную _set_new_handler.The new handler mode indicates whether, on failure, malloc is to call the new handler routine as set by _set_new_handler. По умолчанию malloc не вызывает новую подпрограммы обработчика при сбое выделения памяти.By default, malloc does not call the new handler routine on failure to allocate memory. Это поведение по умолчанию можно переопределить таким образом, что, когда malloc не сможет выделить память, malloc вызывает новую подпрограммы обработчика так же, как new если бы она не завершилась по той же причине.You can override this default behavior so that, when malloc fails to allocate memory, malloc calls the new handler routine in the same way that the new operator does when it fails for the same reason. Чтобы переопределить значение по умолчанию, вызовите на _set_new_mode(1) раннем этапе программы или свяжите с использованием NEWMODE. OBJ (см. раздел Параметры связи).To override the default, call _set_new_mode(1) early in your program, or link with NEWMODE.OBJ (see Link Options).

Если приложение связано с отладочной версией библиотек времени выполнения C, malloc разрешается в _malloc_dbg.When the application is linked with a debug version of the C run-time libraries, malloc resolves to _malloc_dbg. Дополнительные сведения об управлении кучей в процессе отладки см. в разделе Сведения о куче отладки CRT.For more information about how the heap is managed during the debugging process, see CRT Debug Heap Details.

malloc отмечается __declspec(noalias) и __declspec(restrict) ; это означает, что функция гарантированно не изменяет глобальные переменные и что возвращаемый указатель не имеет псевдонима.malloc is marked __declspec(noalias) and __declspec(restrict); this means that the function is guaranteed not to modify global variables, and that the pointer returned is not aliased. Дополнительные сведения см. в разделах noalias и restrict.For more information, see noalias and restrict.

По умолчанию глобальное состояние этой функции ограничивается приложением.By default, this function's global state is scoped to the application. Чтобы изменить это, см. раздел глобальное состояние в CRT.To change this, see Global state in the CRT.

ТребованияRequirements

ПодпрограммаRoutine Обязательный заголовокRequired header
mallocmalloc <stdlib.h> и <malloc.h><stdlib.h> and <malloc.h>

Дополнительные сведения о совместимости см. в статье Compatibility.For additional compatibility information, see Compatibility.

БиблиотекиLibraries

Все версии библиотек времени выполнения языка C.All versions of the C run-time libraries.

ПримерExample

// 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" );
   }
}
Memory space allocated for path name
Memory freed

См. также разделSee also

Выделение памятиMemory Allocation
calloccalloc
freefree
reallocrealloc
_aligned_malloc_aligned_malloc