gpt4 book ai didi

c++ - 如何在 C++ 代码库中对 memalign 进行现代化改造?

转载 作者:行者123 更新时间:2023-12-04 12:30:37 26 4
gpt4 key购买 nike

我正在现代化/更新一些旧代码,这些代码最初是用 C 编写的,但现在用于 C++ 代码库(不需要向后兼容)。一堆代码是使用 memalign 优化的内存,我对此非常缺乏经验,所以我的问题是如何更新这段代码(或者保持原样)以及是否还有任何意义:

声明:

float *table_pf;

以及它是如何在构造函数中初始化的:

table_pf = (float*)memalign(32, sizeof(float) * TALBLE_SIZE);

我找不到现代 C++ 的任何等效项,但我也可能只是错过了它。通常我会简单地将指针转换为 std::vector 或 std::array 但这在使用 memalign 时不起作用。

最佳答案

如果 std::array 是您的一个选项,它很容易对齐(同样适用于裸数组):

alignas(32) std::array<TALBLE_SIZE, float> table;

继承自 C 的用于动态分配过度对齐内存的标准函数是 std::aligned_alloc。它几乎与非标准的 memalign 相同;唯一的区别是它更严格地要求尺寸是对齐的倍数。一个纯 C++ 选项是将运算符 new 与 std::align_val_t 操作数一起使用,默认情况下将使用 std::aligned_alloc

虽然使用分配函数返回的裸指针不是一个好主意:您应该使用 RAII。一种选择是将 std::vector 与使用过度对齐分配函数的分配器一起使用。虽然标准库不提供这样的分配器,因此需要使用自定义分配器。一个更直接但不太灵活的选择是将 std::unique_ptr 与调用 std::free 的删除器一起使用(如果您使用了 operator new,则使用 operator delete)。

关于c++ - 如何在 C++ 代码库中对 memalign 进行现代化改造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69360822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com