glibc原始碼解讀 memset

2021-08-03 11:09:28 字數 945 閱讀 6075

#include #include #undef memset

void *

inhibit_loop_to_libcall

memset(void *dstpp, int c, size_t len)

/* write 8 `op_t' per iteration until less than 8 `op_t' remain. */

xlen = len / (opsiz * 8);

while (xlen > 0)

len %= opsiz * 8;

/* write 1 `op_t' per iteration until less than opsiz bytes remain. */

xlen = len / opsiz;

while (xlen > 0)

len %= opsiz;

}/* write the last few bytes. */

while (len > 0)

return dstpp;

}libc_hidden_builtin_def(memset)

其中部分定義

#define op_t unsigned long int

#define opsiz (sizeof(op_t))

typedef unsigned char byte;

考慮到效率的因素:

1、len < 8 的時候,按每次乙個位元組來讀寫。

2、len >= 8 的時候,32位機器按每次 4 個位元組來讀寫,64位機器按每次 8 個位元組來讀寫,連續做 8 次。剩下的接著按 每次 4 或 8 位元組讀寫, 每次 1 位元組讀寫。

疑問:假如在32位機器下,每次取得 dstp 的位址都是 4 的倍數嗎?怎麼才能取得 不是 4 倍數的位址?

openTLD 原始碼解讀

首先是run tld 在其次就是tldexample 最後到了初始化函式tldinit 第乙個比較關鍵的函式 bb scan 將影象網格化,將首先 scale 1.2.10 10 21 個規格 在每個規格上打網格 這個函式有乙個比較重要的方法 ntuples 就是重複 因為網格上的點很多點有相同的x...

thinkphp原始碼解讀

thinkphp原始碼解讀 thinkphp原始碼的根目錄下是 index.php,是系統預設的 主頁,index.php中首先檢測的是 php執行環境,如果php版本小於 5.3.0則退出執行,定義是否為除錯模式,定義應用目錄,引入入口檔案。thinkphp是整個框架的入口檔案,在thinkphp...

HashMap原始碼解讀

一 建立乙個hashmap都做了哪些工作?mapmap new hashmap hahmap無參構造方法 public hashmap 可以看到設定了載入因子 預設0.75 閾值 預設容量16 預設載入因子0.75 12 table是hashmap內部資料儲存結構entry陣列。當hashmap的s...