名稱空間
變體
操作

std::malloc

來自 cppreference.com
< cpp‎ | memory‎ | c
 
 
記憶體管理庫
(僅作說明*)
未初始化記憶體演算法
(C++17)
(C++17)
(C++17)
受約束的未初始化
記憶體演算法
C 庫
malloc

分配器
記憶體資源
垃圾回收支援
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化儲存
(直到 C++20*)
(直到 C++20*)
顯式生命週期管理
 
定義於標頭檔案 <cstdlib>
void* malloc( std::size_t size );

分配 size 位元組的未初始化儲存。

如果分配成功,返回指向已分配記憶體塊中最低(第一個)位元組的指標,該位元組已適當對齊以用於任何標量型別(至少與 std::max_align_t 一樣嚴格)(隱式地在目標區域建立物件)。

如果 size 為零,則行為是實現定義的(可能返回空指標,或者可能返回某個非空指標,該指標不能用於訪問儲存,但必須傳遞給 std::free)。

以下函式必須是執行緒安全的

對這些函式中分配或解除分配特定儲存單元的呼叫按單一總順序發生,並且每次此類解除分配呼叫都先於此順序中的下一次分配(如果有)。

(C++11 起)

目錄

[編輯] 引數

size - 要分配的位元組數

[編輯] 返回值

成功時,返回指向新分配記憶體起始的指標。為避免記憶體洩漏,返回的指標必須用 std::free()std::realloc() 解除分配。

失敗時,返回空指標。

[編輯] 注意

此函式不呼叫建構函式或以任何方式初始化記憶體。沒有現成的智慧指標可以保證呼叫匹配的解除分配函式。C++ 中首選的記憶體分配方法是使用 RAII 就緒的函式 std::make_uniquestd::make_shared、容器建構函式等,以及在低階庫程式碼中,new 表示式

對於載入大檔案,透過 OS 特定函式進行檔案對映,例如 POSIX 上的 mmap 或 Windows 上的 CreateFileMapping(A/W) 以及 MapViewOfFile,比為檔案讀取分配緩衝區更可取。

[編輯] 示例

#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