关于std::align
:
void* align(size_t alignment, size_t size, void*& ptr, size_t& space)
给缓冲区指针
ptr
[...]返回由指定对齐[...]对齐的指针。该函数修改指针[...]
如果align
成功,则返回的指针与ptr
相同。
This SO answer显示传递偏移地址,该地址为指向align
的指针留出空间,将原始指针存储到超大块,最后在原始指针上调用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);
答案 0 :(得分:1)
如果原始指针未对齐,则viewDidLoad
无法确定添加free()
的结果的偏移量。很可能内存分配算法需要存储一些元信息,而这些元信息通常无法恢复。
您需要释放原始指针。我非常确定在调用std::align()
时传递的指针不同于最初从malloc()
获得的指针,并且会产生未定义的行为(同样适用于其他内存管理工具)。