我正在讀此pull request on dablooms返回值或直接在給定的輸出參數上寫入它會更好嗎?
最糟糕的是,摩摩爾不返回堆棧/寄存器中的散列值,而是直接將其寫入到提供的緩衝液中。這使得使用大量隨機數據填充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
是multiplyMatrices
的return
值。但學習使用OpenGL,GLEW和freeglut在我最近的項目,我不是這樣的不通話時看到更多的時候:
Matrix leftOperand = { /* some values */ };
Matrix rightOperand = { /* some values */ };
Matrix result;
multiplyMatrices(leftOperand, rightOperand, result);
我明白它做什麼,但我覺得符號爲奇數。然而,我越來越頻繁地看到這一點,當我看到上述拉申請的作者'讚美'時,我認爲可能有充分的理由這樣做。
因此,爲了寫出更少的糟糕和難聞的代碼,我想知道這是否是一種好的做法。我認爲它必須是出於性能方面的原因,但我不清楚從堆棧中壓入/彈出是否比直接寫入給定內存地址要慢。
我正在尋找一些指導原則,使用一種優於另一種。
您特別感興趣哪種語言? – 2012-08-09 09:34:50
@DanPuzey第一個例子是在C中,但我的用例是C++和Java。 – AntoineG 2012-08-09 10:12:52