gpt4 book ai didi

c++ - 分配初始化、对齐的内存

转载 作者:可可西里 更新时间:2023-11-01 16:37:41 25 4
gpt4 key购买 nike

我正在编写一个程序(在 C++ 中),我需要在其中分配起始地址应与缓存行大小对齐的数组。当我分配这些数组时,我还希望将内存初始化为零。

现在我可以使用 posix_memalign 函数让它工作。这适用于获取内存对齐的数组,但数组未初始化。是否有更好的函数可用于在我初始化数组时将数组清零,或者我是否只需要编写一个单独的循环来为我做这件事?

最佳答案

只需调用 block 上的memset。在调用 memset 之前,请确保您没有将指针转换为设置成本很高的类型(如 char *)。由于您的指针将对齐,因此请确保信息不会对编译器隐藏。

更新:为了澄清我关于不隐藏对齐的观点,比较:

char* mem_demo_1(char *j)
{ // *BAD* compiler cannot tell pointer alignment, must test
memset(j, 0, 64);
return j;
}

char* mem_demo_2(void)
{ // *GOOD* compiler can tell pointer alignment
char * j = malloc(64);
memset(j, 0, 64);
return j;
}

使用GCCmem_demo_1编译为60行汇编,而mem_demo_2编译为20行。性能差异也很大。

关于c++ - 分配初始化、对齐的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13908467/

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