std:: malloc
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
헤더 파일에 정의됨
<cstdlib>
|
||
|
void
*
malloc
(
std::
size_t
size
)
;
|
||
size 바이트의 초기화되지 않은 저장 공간을 할당합니다.
할당이 성공하면, 모든 스칼라 타입에 적합하게 정렬된(최소한 std::max_align_t 만큼 엄격하게) 할당된 메모리 블록에서 가장 낮은(첫 번째) 바이트를 가리키는 포인터를 반환합니다 ( 대상 영역에 객체를 암시적으로 생성 하면서).
만약 size 가 0이면, 동작은 구현에 따라 정의됩니다 (널 포인터가 반환될 수도 있고, 저장 공간에 접근하는 데 사용할 수는 없지만 std::free 에 전달되어야 하는 어떤 널이 아닌 포인터가 반환될 수도 있습니다).
|
다음 함수들은 스레드 안전성이 요구됩니다:
특정 저장 단위를 할당하거나 해제하는 이러한 함수들의 호출은 단일 전체 순서로 발생하며, 각 해제 호출은 이 순서에서 다음 할당(있는 경우)에 대해 happens-before 관계를 가집니다. |
(C++11부터) |
목차 |
매개변수
| size | - | 할당할 바이트 수 |
반환값
성공 시, 새로 할당된 메모리의 시작 포인터를 반환합니다. 메모리 누수를 방지하기 위해 반환된 포인터는 std::free() 또는 std::realloc() 로 해제해야 합니다.
실패 시, 널 포인터를 반환합니다.
참고 사항
이 함수는 생성자를 호출하지 않으며 어떤 방식으로도 메모리를 초기화하지 않습니다. 일치하는 할당 해제 함수가 호출됨을 보장할 수 있는 바로 사용 가능한 스마트 포인터는 존재하지 않습니다. C++에서 메모리 할당의 선호되는 방법은 RAII-ready 함수인 std::make_unique , std::make_shared , 컨테이너 생성자 등을 사용하고, 저수준 라이브러리 코드에서는 new-expression 을 사용하는 것입니다.
대용량 파일을 로드할 때는 파일 읽기를 위한 버퍼를 할당하는 것보다 OS별 함수를 통한 파일 매핑, 예를 들어
mmap
on POSIX 또는
CreateFileMapping
(
A
/
W
)와 함께
MapViewOfFile
on Windows를 사용하는 것이 바람직합니다.
예제
#include <cstdlib> #include <iostream> #include <memory> #include <string> int main() { constexpr std::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); } }
출력:
p[0] == aaaaa p[1] == bbbbb p[2] == ccccc p[3] == ddddd
참고 항목
|
할당 함수
(함수) |
|
|
(C++17에서 사용 중단됨)
(C++20에서 제거됨)
|
초기화되지 않은 저장 공간 획득
(함수 템플릿) |
|
C 문서
for
malloc
|
|