gpt4 book ai didi

C - 或两个位图的最快方法

转载 作者:行者123 更新时间:2023-11-30 20:10:30 25 4
gpt4 key购买 nike

与此问题非常相似:C fastest way to compare two bitmaps

但是我想要一个返回的位图(最有可能用 char * 表示的 0/1 值的文字序列),它是它们两个的按位或?这里的 mem___ 似乎都没有意义?

位图保证大小相同。我还想存储按位或的结果,以便生成的位图需要可访问。位图的大小为 10^5 字节。

long * a = (long *) getByteBufferData();
long * b = (long *) getByteBufferData(); //these return different pointers
for(int i = 0; i < SystemByteSize , i++){
a[i] = a[i] | b[i];
}

最佳答案

如果您修复了循环限制(缓冲区的字节大小/sizeof long)并确保缓冲区是long对齐的,则可以确定编译器将对此进行很好的优化。对于 x86,即使是旧版本的 gcc 也会使用 SSE 指令一次 16 个字节。

用 C 语言编写该函数的简洁方法是:

void or(unsigned long *r, unsigned long *x, unsigned n) {
while (n--) *r++ |= *x++;
}

Here's gcc 4.8 output在-O4。使用针对特定处理器的手工汇编语言也许可以做得更好,但效果有限。

关于C - 或两个位图的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45156562/

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