我在 dablooms 上阅读这个拉取请求
最重要的是,Murmur 不会返回堆栈/寄存器上的哈希值,而是将其直接写入提供的缓冲区。这使得用大量随机数据填充bloom-> hashes缓冲区并逐步执行模块化变得非常容易。
for (i = 0; i < bloom->nsalts; i++, hashes += 4) {
MurmurHash3_x64_128(key, key_len, bloom->salts[i], hashes);
hashes[0] = hashes[0] % bloom->counts_per_func;
hashes[1] = hashes[1] % bloom->counts_per_func;
hashes[2] = hashes[2] % bloom->counts_per_func;
hashes[3] = hashes[3] % bloom->counts_per_func;
}
我最近注意到一些库(至少在 C++ 中,我的知识非常有限,因为我是个新手)似乎不返回值,而是期望他们将在其上写入结果的输出参数。我更习惯看到这样的事情:
Matrix leftOperand = { /* some values */ };
Matrix rightOperand = { /* some values */ };
Matrix result;
result = multiplyMatrices( leftOperand, rightOperand );
result
的return
值在哪里multiplyMatrices
。但是在我最近的项目中学习使用 OpenGL、GLEW 和 freeglut,我经常看到这样的调用:
Matrix leftOperand = { /* some values */ };
Matrix rightOperand = { /* some values */ };
Matrix result;
multiplyMatrices( leftOperand, rightOperand, result );
我理解它的作用,但我觉得这个符号很奇怪。然而,我越来越频繁地看到这种情况,当我看到上面的 pull request 的作者“称赞”它时,我认为可能有一个很好的理由这样做。
因此,在我寻求编写更少糟糕和难闻的代码的过程中,我想知道这是否是一种好的做法。我认为这一定是出于性能原因,但我不清楚从堆栈中推送/弹出是否比直接写入给定内存地址慢。
我正在寻找一些关于使用一种方式而不是另一种方式的原因的指导方针。