分配初始化的对齐内存

mar*_*ega 9 c c++ posix memory-alignment dynamic-allocation

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

现在我使用posix_memalign函数工作了.这适用于获取内存对齐的数组,但数组未经过限制.有什么更好的函数可以用来在我初始化它们时将数组清零,或者我是否只需要为我编写一个单独的循环来解决它?

Dav*_*rtz 9

只需打电话memset给街区.确保char *在调用之前不要将指针强制转换为设置(类似)的类型memset.由于指针将对齐,因此请确保信息不会从编译器中隐藏.

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

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;
}
Run Code Online (Sandbox Code Playgroud)

GCC,mem_demo_1编译成组件的60行而mem_demo_2编译至20.性能差别也很大.