[c] memory 相關的函式(memset, memcpy, memmove)

memset
void * memset ( void * ptr, int value, size_t num );
ptr      :為destination address 的pointer
value :想要set的值。(居然是type int. 表示是0~255(unsign char))
num   :number of bytes
這表示一次只能set 1bytes,然後寫入num個。(這真是沒效率 囧...)
這邊說錯了, 要reset值的長度用sizeof(ptr)就好了... (05/04/2011)

memcpy
void * memcpy ( void * destination, const void * source, size_t num );
這ok,不過若source在copy時被overwrite時會是問題。




memmove
void * memmove ( void * destination, const void * source, size_t num ); memmove跟memcpy狠像,唯一的差別是在於它能保證source不會被overwrite。 另外關於w32api中mmap的使用可以參照這裡 ,另外也需要參考MSDN 1) 主要有三個步驟CreateFile(), CreateFileMapping()跟MapViewOfFile() 2) mapping的blocksize需為dwAllocationGranularity的倍數。 3) 主要是為了處理大檔(>=2**32, 2G以上),由於他的maxsize有Hi跟Low之分,要用 Hi = offset>>32, Low = offset & 0xffffffff 以轉成64bits. 4) MapViewOfFile Object 回傳ptr, 所以需要使用buffer來儲存欲處理的 data


Comments

Popular posts from this blog

股票評價(Stock Valuation) - 股利折現模型

openwrt feed的使用

R 語言:邏輯回歸 Logistic Regression using R language (二)