我正在初始化C 4.3.2中大小爲100000000的數組(unsigned short int),以及另外兩個大小爲1000000的int數組。但在提交Online判斷時,它給出了SIGSEGV錯誤。如何使用默認值動態初始化數組?
因此,我決定用默認值0動態初始化我的數組,因爲通過循環添加值需要很長時間。
我的問題是如何使用默認值動態初始化數組?
我正在初始化C 4.3.2中大小爲100000000的數組(unsigned short int),以及另外兩個大小爲1000000的int數組。但在提交Online判斷時,它給出了SIGSEGV錯誤。如何使用默認值動態初始化數組?
因此,我決定用默認值0動態初始化我的數組,因爲通過循環添加值需要很長時間。
我的問題是如何使用默認值動態初始化數組?
可以使用void *calloc(size_t nmemb, size_t size);
函數0
初始化存儲器,
的
calloc()
函數爲nmemb
元件尺寸的 每個字節的數組分配內存,並返回一個指針分配的內存。 內存設置爲zero
。如果nmemb
或大小是0
,然後calloc()
返回任一NULL
,或者唯一的指針值,該值可以在以後是 成功傳遞到free()
。
calloc(number of elements, sizeof(type));
,或者您也可以使用memset()
明確初始化由malloc()
呼叫分配的內存。
注:calloc()
不是魔術要麼 - 它會也使用一個循環的地方全部用0來取代垃圾。
+1可能值得一提的是,'calloc()'也不是魔術 - 它也會**使用循環來代替垃圾全零。 – 2013-07-27 14:14:10
@GrijeshChauhan你越來越好 –
@Coffee_lover我現在失業了,所以我得到時間:P:D謝謝! –
不能消除初始化的時候,不管你做什麼。你能做的最好的就是嘗試優化吧。 2種技巧浮現在腦海中:
無論如何,展開將通過優化編譯器來應用。
您還可以嘗試將初始化開銷移至非關鍵部分。例如,你可以使用在程序啓動時將被初始化的靜態變量。或者,相比之下,您可以延遲初始化直到首次使用(延遲初始化)。
100000000真的嗎? – P0W
這樣的大小,通過類似UNIX系統的'mmap()'或Windows上的'VirtualAlloc()'直接向操作系統請求內存是有意義的。方便地,這些函數已經爲你的內存調零... – Christoph