[英]c: pointers - how to increase every 2nd byte by X
我有一個指針,其中包含100個字節的數據。 我想在第二個字節中加5。
例:
1 2 3 4 5 6
會變成:
1 7 3 9 5 11
現在我知道我可以進行for循環了,有沒有更快的方法? 像memset這樣的東西會增加每個第二字節的值?
謝謝
循環將是最好的方法。 memset()對於設置連續的內存塊非常有效。 在這里對您沒有太大幫助。
您使用哪種格式的字節? 作為串聯字符? 還是字節是uint32的子部分?
通常,循環是執行此操作的最佳方法-即使您能夠使用memset應用類似模式的掩碼,您仍然需要創建它,並且將花費相同數量的CPU周期。
如果每個元素有4個字節(例如uint32),則可以通過創建用於添加的預定義掩碼將CPU周期減少一半。 但是請注意:這樣的解決方案不會檢查溢出(偽代碼):
uint32* ptr = new uint32[16]; // creates 64 bytes of data
(...) fill data
for (int k=0; k < 16; ++k)
{
// Hardcored Add-Mask for Little Endian systems
ptr[k] += 0x05000500; // dereference and add mask to content
}
編輯:請注意,這假設一個小端系統,並且是C ++偽代碼。
如果memset
支持增加第n個字節的值,您認為它將如何實現呢?
實際上,您可以使用循環展開來使其更快,但是您需要知道數組的大小是固定的。 然后,您只需重復分配值即可跳過循環開銷:
array[ 1 ] += 5;
array[ 3 ] += 5;
array[ 5 ] += 5;
...
這樣,您就不會有循環中會出現的跳轉和測試指令所產生的開銷,但是您可以在代碼膨脹中為此付出代價。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.