首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要使用_mm_malloc?(相对于_aligned_malloc、alligned_alloc或posix_memalign)

为什么要使用_mm_malloc?(相对于_aligned_malloc、alligned_alloc或posix_memalign)
EN

Stack Overflow用户
提问于 2015-09-16 15:30:16
回答 3查看 29.5K关注 0票数 43

获取对齐内存块有几种选择,但它们非常相似,问题主要在于您所针对的语言标准和平台。

C11

代码语言:javascript
运行
复制
void * aligned_alloc (size_t alignment, size_t size)

POSIX

代码语言:javascript
运行
复制
int posix_memalign (void **memptr, size_t alignment, size_t size)

视窗

代码语言:javascript
运行
复制
void * _aligned_malloc(size_t size, size_t alignment);

当然,用手对齐也是一种选择。

英特尔提供了另一种选择。

英特尔

代码语言:javascript
运行
复制
void* _mm_malloc (int size, int align)
void _mm_free (void *p)

基于Intel发布的源代码,这似乎是他们工程师喜欢的分配对齐内存的方法,但我找不到任何与其他方法相比较的文档。我发现的最接近的只是承认存在其他对齐内存分配例程。

https://software.intel.com/en-us/articles/memory-management-for-optimal-performance-on-intel-xeon-phi-coprocessor-alignment-and

要动态分配对齐内存,请使用由GCC和英特尔编译器支持的posix_memalign。使用它的好处是您不必更改内存处理API。您可以像往常一样使用free()。但是,请注意参数简介: posix_memalign (  **memptr,size_t对齐,size_t大小); Intel编译器还提供了另一组内存分配API。C/C++程序员可以使用_mm_malloc和_mm_free分配和释放对齐内存块。例如,以下语句为8个浮点元素请求一个64字节对齐内存块. __mm_malloc(8*sizeof(  ),64); 使用_mm_malloc分配的内存必须使用_mm_free释放。在用_mm_malloc分配的内存上调用空闲或对使用malloc分配的内存调用_mm_free将导致不可预测的行为。

从用户的角度看,_mm_malloc需要直接的CPU和编译器支持,_mm_malloc分配的内存必须用_mm_free释放。鉴于这些缺点,使用_mm_malloc?的原因是什么?它是否具有轻微的性能优势?历史上的意外?

EN

Stack Overflow用户

发布于 2015-09-16 15:44:27

_mm_malloc似乎是在标准aligned_alloc函数出现之前创建的,使用_mm_free的需求是实现的一个怪癖。

我的猜测是,与使用posix_memalign不同的是,它不需要为了保证对齐而过度分配,而是使用单独的对齐感知分配器。这将在分配与默认对齐方式不同的类型(通常为8或16字节)时节省内存。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32612881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档