Namespaces
Variants

std:: malloc

From cppreference.net
< cpp ‎ | memory ‎ | c
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
ヘッダーで定義 <cstdlib>
void * malloc ( std:: size_t size ) ;

初期化されていないストレージを size バイト割り当てます。

確保が成功した場合、任意のスカラー型に対して適切にアラインされた(少なくとも std::max_align_t と同等以上に厳密に)メモリブロックの最下位(最初)のバイトへのポインタを返します( 暗黙的にオブジェクトを作成 します)。

size がゼロの場合、動作は実装定義です(ヌルポインタが返されるか、ストレージへのアクセスに使用できないが std::free に渡されなければならない非ヌルポインタが返される可能性があります)。

以下の関数はスレッドセーフであることが要求されます:

特定の記憶単位を割り当てまたは解放するこれらの関数の呼び出しは、単一の全順序で発生し、そのような各解放呼び出しは happens-before この順序における次の割り当て(存在する場合)となります。

(C++11以降)

目次

パラメータ

size - 割り当てるバイト数

戻り値

成功時は、新しく割り当てられたメモリの先頭へのポインタを返します。メモリリークを避けるため、返されたポインタは std::free() または std::realloc() で解放しなければなりません。

失敗した場合、ヌルポインタを返します。

注記

この関数はコンストラクタを呼び出さず、いかなる方法でもメモリを初期化しません。対応する解放関数が呼び出されることを保証できる、すぐに使用可能なスマートポインタは存在しません。C++におけるメモリ割り当ての推奨方法は、RAII対応の関数 std::make_unique std::make_shared 、コンテナのコンストラクタなどを使用すること、および低レベルライブラリコードでは new-expression を使用することです。

大容量ファイルの読み込みには、ファイル読み込み用のバッファを割り当てるよりも、OS固有の関数によるファイルマッピング、例えば mmap (POSIX)や CreateFileMapping ( A / W ) と MapViewOfFile (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で削除)
初期化されていない記憶域を取得
(関数テンプレート)