std::malloc

std::malloc

C++

编译器支持

自由(freestanding)与宿主(hosted)

语言

标准库

标准库头文件

具名要求

特性测试宏 (C++20)

语言支持库

概念库 (C++20)

诊断库

内存管理库

元编程库 (C++11)

通用工具库

容器库

迭代器库

范围库 (C++20)

算法库

字符串库

文本处理库

数值库

日期和时间库

输入/输出库

文件系统库 (C++17)

并发支持库 (C++11)

执行控制库 (C++26)

技术规范

符号索引

外部库

[编辑] 内存管理库

voidify(仅作说明*)

未初始化内存算法

uninitialized_copy

uninitialized_fill

uninitialized_move(C++17)

uninitialized_default_construct(C++17)

uninitialized_value_construct(C++17)

destroy(C++17)

destroy_at(C++17)

uninitialized_copy_n(C++11)

uninitialized_fill_n

uninitialized_move_n(C++17)

uninitialized_default_construct_n(C++17)

uninitialized_value_construct_n(C++17)

destroy_n(C++17)

construct_at(C++20)

受约束的未初始化内存算法

ranges::uninitialized_copy(C++20)

ranges::uninitialized_fill(C++20)

ranges::uninitialized_move(C++20)

ranges::construct_at(C++20)

ranges::destroy(C++20)

ranges::destroy_n(C++20)

ranges::destroy_at(C++20)

ranges::uninitialized_copy_n(C++20)

ranges::uninitialized_fill_n(C++20)

ranges::uninitialized_move_n(C++20)

ranges::uninitialized_default_construct(C++20)

ranges::uninitialized_value_construct(C++20)

ranges::uninitialized_default_construct_n(C++20)

ranges::uninitialized_value_construct_n(C++20)

C 库

malloc

calloc

realloc

aligned_alloc(C++17)

free

分配器

allocator

allocator_traits(C++11)

allocation_result(C++23)

allocator_arg(C++11)

uses_allocator(C++11)

uses_allocator_construction_args(C++20)

make_obj_using_allocator(C++20)

uninitialized_construct_using_allocator(C++20)

scoped_allocator_adaptor(C++11)

pmr::polymorphic_allocator(C++17)

内存资源

pmr::memory_resource(C++17)

pmr::get_default_resource(C++17)

pmr::set_default_resource(C++17)

pmr::new_delete_resource(C++17)

pmr::null_memory_resource(C++17)

pmr::synchronized_pool_resource(C++17)

pmr::unsynchronized_pool_resource(C++17)

pmr::monotonic_buffer_resource(C++17)

pmr::pool_options(C++17)

垃圾回收支持

declare_reachable(C++11)(直到 C++23)

undeclare_reachable(C++11)(直到 C++23)

declare_no_pointers(C++11)(直到 C++23)

undeclare_no_pointers(C++11)(直到 C++23)

pointer_safety(C++11)(直到 C++23)

get_pointer_safety(C++11)(直到 C++23)

未初始化存储

raw_storage_iterator(直到 C++20*)

get_temporary_buffer(直到 C++20*)

return_temporary_buffer(直到 C++20*)

显式生命周期管理

start_lifetime_asstart_lifetime_as_array(C++23)(C++23)

智能指针

unique_ptr(C++11)

shared_ptr(C++11)

weak_ptr(C++11)

auto_ptr(直到 C++17*)

owner_less(C++11)

owner_less(C++17)

owner_hash(C++26)

owner_equal(C++26)

enable_shared_from_this(C++11)

bad_weak_ptr(C++11)

default_delete(C++11)

out_ptr_t(C++23)

inout_ptr_t(C++23)

低级内存管理

operator new

operator new[]

operator delete

operator delete[]

get_new_handler(C++11)

set_new_handler

launder(C++17)

bad_alloc

bad_array_new_length(C++11)

nothrow_t

align_val_t(C++17)

destroying_delete_t(C++20)

new_handler

nothrow

杂项

pointer_traits(C++11)

to_address(C++20)

addressof(C++11)

align(C++11)

assume_aligned(C++20)

is_sufficiently_aligned(C++26)

[编辑]

定义于头文件

void* malloc( std::size_t size );

分配 size 字节的未初始化存储。

如果分配成功,返回指向已分配内存块中最低(第一个)字节的指针,该字节已适当对齐以用于任何标量类型(至少与 std::max_align_t 一样严格)(隐式地在目标区域创建对象)。

如果 size 为零,则行为是实现定义的(可能返回空指针,或者可能返回某个非空指针,该指针不能用于访问存储,但必须传递给 std::free)。

以下函数必须是线程安全的

库版本的 operator new 和 operator delete用户替换版本的全局 operator new 和 operator delete std::calloc, std::malloc, std::realloc, std::aligned_alloc(C++17 起), std::free

对这些函数中分配或解除分配特定存储单元的调用按单一总顺序发生,并且每次此类解除分配调用都先于此顺序中的下一次分配(如果有)。

(C++11 起)

目录

1 参数

2 返回值

3 注意

4 示例

5 另请参阅

[编辑] 参数

size

-

要分配的字节数

[编辑] 返回值

成功时,返回指向新分配内存起始的指针。为避免内存泄漏,返回的指针必须用 std::free() 或 std::realloc() 解除分配。

失败时,返回空指针。

[编辑] 注意

此函数不调用构造函数或以任何方式初始化内存。没有现成的智能指针可以保证调用匹配的解除分配函数。C++ 中首选的内存分配方法是使用 RAII 就绪的函数 std::make_unique、std::make_shared、容器构造函数等,以及在低级库代码中,new 表达式。

对于加载大文件,通过 OS 特定函数进行文件映射,例如 POSIX 上的 mmap 或 Windows 上的 CreateFileMapping(A/W) 以及 MapViewOfFile,比为文件读取分配缓冲区更可取。

[编辑] 示例

运行此代码

#include

#include

#include

#include

int main()

{

constexpr std::size_t size = 4;

if (auto ptr = reinterpret_cast(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

[编辑] 参阅

operator newoperator new[]

分配函数 (函数) [编辑]

get_temporary_buffer(在 C++17 中已弃用)(在 C++20 中已移除)

获取未初始化存储 (函数模板) [编辑]

C 文档 for malloc

相关推荐

每周一龙:第 22 期
英国正版365app下载

每周一龙:第 22 期

📅 08-30 👁️ 2395
InWin迎广机箱
365bet正网平台

InWin迎广机箱

📅 10-06 👁️ 8132
世界杯竞情?世界杯竞猜规则及玩法分析
英国正版365app下载

世界杯竞情?世界杯竞猜规则及玩法分析

📅 07-06 👁️ 148