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 из-за пространства, необходимый для выравнивания и данных обслуживания.
malloc задает для параметра errno значение ENOMEM, если выделение памяти завершается сбоем или количество запрошенной памяти превышает _HEAP_MAXREQ. Сведения об этих и других кодах ошибок см. в разделе errno, _doserrno, _sys_errlist, and _sys_nerr.
Код запуска используется malloc, чтобы выделить хранилище для переменных _environ, envp и argv. Следующие функции и их широкосимвольные аналоги также вызывают malloc.
|
|||
|
Функция _set_new_mode C++ задает новый режим обработчика события 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. Для получения дополнительной информации см. Примеры вызовов неуправляемого кода.