std::malloc
Definido en el archivo de encabezado <cstdlib> | ||
void* malloc(std::size_t size ); | ||
Asigna size
bytes de almacenamiento no inicializado.
Si la asignación tiene éxito, devuelve un puntero al byte más bajo (el primero) en el bloque de memoria asignado que está adecuadamente alineado para cualquier tipo escalar (al menos tan estrictamente como std::max_align_t).
Si size
es cero, el comportamiento está definido por la implementación (se puede devolver un puntero nulo, o se puede devolver algún puntero no nulo que no se puede usar para acceder al almacenamiento, pero debe pasarse a std::free).
Se requiere que las siguientes funciones sean seguras frente a hilos:
Las llamadas a estas funciones que asignan o desasignan una unidad de almacenamiento particular ocurren en un orden total único, y cada llamada de desasignación sucede-antes que la siguiente asignación (si es que la hay) en este orden. | (desde C++11) |
Contenido |
[editar]Parámetros
size | - | Número de bytes a asignar. |
[editar]Valor de retorno
En caso de éxito, devuelve el puntero al principio de la memoria recién asignada. Para evitar una fuga de memoria, el puntero devuelto se debe desasignar con std::free() o std::realloc().
En caso de falla, devuelve un puntero nulo.
[editar]Notas
Esta función no llama a los constructores ni inicializa la memoria de ninguna manera. No hay punteros inteligentes listos para usar que puedan garantizar que se llame a la función de desasignación coincidente. El método preferido de asignación de memoria en C++ es usar funciones listas para RAII std::make_unique, std::make_shared, constructores de contenedores, etc. y, en código de biblioteca de bajo nivel, la expresión new.
Para cargar un archivo grande, mapeo de archivos a través de funciones específicas del sistema operativo, por ejemplo mmap
en POSIX o CreateFileMapping
(A
/W
) junto con MapViewOfFile
en Windows, es preferible a la asignación de un búfer para la lectura de archivos.
[editar]Ejemplo
#include <iostream> #include <cstdlib> #include <string>#include <memory> int main(){constexprstd::size_t size =4;if(auto ptr =reinterpret_cast<std::string*>( std::malloc(size * sizeof(std::string)))){try{for(std::size_t i =0; i < size;++i)std::construct_at(ptr + i, 5, 'a'+ i);for(std::size_t i =0; i < size;++i)std::cout<<"ptr["<< i <<"] == "<< ptr[i]<<'\n';std::destroy_n(ptr, size);}catch(...){}std::free(ptr);}}
Salida:
p[0] == aaaaa p[1] == bbbbb p[2] == ccccc p[3] == ddddd
[editar]Véase también
Funciones de asignación. (función) | |
(en desuso en C++17)(eliminado en C++20) | Obtiene almacenamiento sin inicializar. (plantilla de función) |
Documentación de C para malloc |