2014-01-15 67 views
1

所以隨着問題:)。我需要以隨機順序(混洗)將大量(約5,000,000)數量的唯一號碼保存到文件中。 我寫過程序,只適用於約。 1,000,000。它首先創建一個有序元素數組,然後將它們洗牌並將每個數字保存在文件的新行中。但是,當我試圖增加數量「分段錯誤」出現。我認爲這是因爲我想在開始時爲該陣列分配如此多的空間。如何在一個文件中保存大量的數字C

那麼有沒有更好的(高效?)保存這些數字的方法?它可以直接保存到文件中。 我需要所有的數字做一些C的數據比較

回答

1

有三種不同的方式來分配內存:

靜態分配:

int data[5000000]; /* allocate outside functions */ 

static int data[5000000]; /* anywhere */ 

內存在程序啓動時設置。

在堆:

int *data = malloc(5000000*sizeof int);  

內存設置時malloc被調用。如果堆中沒有足夠的可用空間,程序將從操作系統請求更多內存。

在堆棧:

int data[5000000]; /* allocate inside function */ 

內存將在堆棧分配。如果堆棧中沒有足夠的空間,則程序將失敗。

靜態分配和堆分配通常可以處理大型數組,而堆棧分配更有限。

+0

偉大的作品相當不錯:)。但是現在我想知道是否有可能避免創建數組,然後將其保存並保存? – advena

+0

快速洗牌:http://stackoverflow.com/questions/196017/unique-random-numbers-in-o1 關於生成唯一隨機數字的文章:http://preshing.com/20121224/how-to-generate- a-sequence-of-unique-random-integers /(請參閱A非重複僞隨機數生成器部分) –

+0

也許提到堆內存不僅需要程序員考慮更多(釋放你聲稱的內存,傳遞指針指針等......),但是_stack_內存通常也更快。底線:非常大的數據集:使用堆,如果你不需要:使用堆棧 –

相關問題