gpt4 book ai didi

C++ : comparing performance of pointers pointing at different locations in a char array (trying to learn alignment)

转载 作者:太空狗 更新时间:2023-10-29 23:09:41 26 4
gpt4 key购买 nike

上下文:

char buffer[99]; int* ptr_int=(int*)(buffer+n);

然后我对 *ptr_int 执行一些耗时的操作并使用 windows.h/QueryPerformanceCounter 测量执行时间。

困惑:对于 n 的值:0 到 4,执行时间约为 12 秒对于 n 的值:5、6、7,执行时间约为 20 秒对于 n 的值:32,33,执行时间再次约为 12 秒。

这可能是由于对齐所致,但有人可以解释一下究竟是怎么回事吗?

奔腾双核T2410/winxp/g++3.4.2(mingw-special)

编辑我不是试图通过使用更好的方法来避免对齐问题,而是试图找出为什么我突然遇到 int* ptr_int=(int*)(buffer+5);

没有问题:int* ptr_int=(int*)(buffer+3);int* ptr_int=(int*)(buffer+33);

最佳答案

在现代 CPU 上,数据需要正确对齐,否则就会付出惨重代价。一个 32 位整数需要按 4 个字节对齐,否则 CPU 将在内部需要读取两个整数并四处移动以适应。如果您尝试读取未对齐的整数,某些 CPU 实际上会崩溃。

同样,一个 128 位的 __vector4 需要按 16 个字节等对齐。

顺便说一下,还有其他因素在起作用,比如数据缓存行,所以第一次访问新的缓存行时,会有很大的损失 - 后续读取会快得多。

关于C++ : comparing performance of pointers pointing at different locations in a char array (trying to learn alignment),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4264291/

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