【发布时间】:2017-08-10 04:48:30
【问题描述】:
关于std::align:
void* align(size_t alignment, size_t size, void*& ptr, size_t& space)给定一个指向缓冲区的指针
ptr[...] 返回一个按指定对齐方式对齐的指针 [...]。该函数修改指针[...]
如果align成功,那么返回的指针和ptr是一样的。
This SO answer 显示传递一个偏移地址,为指向align 的指针留出空间,存储指向超大块的原始指针,最后在 original 指针上调用 delete。是否有必要,或者简单地这样做是否安全:
size_t space = 64;
void* ptr = malloc(space);
void* ret = std::align(alignment, targetSize, ptr, space);
if (ret == nullptr) { /* failed to align */ }
free(ptr);
【问题讨论】:
-
注意C++中没有使用malloc;使用 ::operator new 而不是 malloc。
-
@TheTechel 我正在与一个需要使用 malloc 分配的 C 库进行交互,否则是的。