看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) windows: C::B Linux : gcc 問題(Question): 嘗試性的做了一下 "字母+數字" 的全排列方式 先做了一個檔案 ker1.txt 其內容如下: (a~z, 0~9 共 36 個字元各一行) //= ker1.txt ================== a b c . . . z 0 1 2 3 . . . 9 // ============================ 之後跑跑以下的 code // = kerker.c ================= #include <stdio.h> #define N 2 int main () { int i, n; char key[] = "abcdefghijklmnopqrstuvwxyz0123456789"; char in[10], out[10], tmp[50]; sprintf(in , "ker%d.txt", N-1); sprintf(out, "ker%d.txt", N); freopen(in , "r", stdin); freopen(out, "w", stdout); while (gets(tmp) != NULL) { for (i = 0; i < 36; i++) { printf("%s", tmp); putchar(key[i]); putchar('\n'); } } return 0; } //============================= 逐一將 N 的值從 2 調到 4 依序產生 ker2.txt 到 ker4.txt 等檔案 似乎是檔案太大的關係,記事本已經無法打開 ker4.txt 於是我將實驗平台從 windows 上般到 Linux 機器上 成功產生以下檔案 -rw-r--r-- 1 xatier xatier 72 2011-02-15 18:51 ker1.txt -rw-r--r-- 1 xatier xatier 3.8K 2011-02-15 18:52 ker2.txt -rw-r--r-- 1 xatier xatier 183K 2011-02-15 18:52 ker3.txt -rw-r--r-- 1 xatier xatier 8.1M 2011-02-15 18:55 ker4.txt -rw-r--r-- 1 xatier xatier 346M 2011-02-15 18:56 ker5.txt -rw-r--r-- 1 xatier xatier 2.0G 2011-02-15 19:01 ker6.txt ker6.txt 大概跑了六分鐘左右,已經是 2G 大小的東西了 = =a 以 vim 開啟檢查,檔案內容無誤 爾後我測試了將 N 改成 7 的程式 至今已經花了快 半小時 結果還沒跑出來 ======================================== 想請教各位板上先進 像這種大型檔案的 IO 處理 有辦法用其他方法將 printf() putchar() 等函式加速嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.60.107.233
james732:你可以看一下是不是已經跑到硬碟速度的上限了 02/15 19:28
james732:Windows下,Notapad++處理大檔案會比記事本還好一點 02/15 19:30
loveme00835:是 input 慢還是 output 慢? 02/15 19:41
xatier:我覺得應該是 output 慢吧? 單從 code 來看,output 多了好 02/15 19:41
xatier:多次數 02/15 19:42
xatier@tcirc:~/etc$ ls -l -h -rw-r--r-- 1 xatier xatier 72 2011-02-15 18:51 ker1.txt -rw-r--r-- 1 xatier xatier 3.8K 2011-02-15 18:52 ker2.txt -rw-r--r-- 1 xatier xatier 183K 2011-02-15 18:52 ker3.txt -rw-r--r-- 1 xatier xatier 8.1M 2011-02-15 18:55 ker4.txt -rw-r--r-- 1 xatier xatier 346M 2011-02-15 18:56 ker5.txt -rw-r--r-- 1 xatier xatier 2.0G 2011-02-15 19:01 ker6.txt -rw-r--r-- 1 xatier xatier 2.0G 2011-02-15 19:10 ker7.txt xatier@tcirc:~/etc$ ls -l -rw-r--r-- 1 xatier xatier 72 2011-02-15 18:51 ker1.txt -rw-r--r-- 1 xatier xatier 3888 2011-02-15 18:52 ker2.txt -rw-r--r-- 1 xatier xatier 186624 2011-02-15 18:52 ker3.txt -rw-r--r-- 1 xatier xatier 8398080 2011-02-15 18:55 ker4.txt -rw-r--r-- 1 xatier xatier 362797056 2011-02-15 18:56 ker5.txt -rw-r--r-- 1 xatier xatier 2147483647 2011-02-15 19:01 ker6.txt -rw-r--r-- 1 xatier xatier 2147483647 2011-02-15 19:10 ker7.txt ↑ int 上限 話說 ls 指令似乎無法辨識 2G 以上的檔案大小 ※ 編輯: xatier 來自: 210.60.107.233 (02/15 19:46)
xatier:囧...ker7.txt 終於跑出來但 vim 打不開 = =" 02/15 19:53
james732:看了一下,CPU閒得要命,瓶頸顯然在硬碟寫入 02/15 19:54
xatier:所以這是硬體上的天然限制囉? 02/15 19:57
james732:對了,我這裡ker6還沒跑完,已經超過6.5G了 02/15 19:58
xatier:我這裡用 ls 查只能看到大小是 2G why? 02/15 20:01
james732:我不知道,我的系統是CentOS 5.5 64位元版 02/15 20:02
james732:ker6.txt 15237476352( 15G) 4m0.642s 02/16 10:17
james732:ker7.txt 626913312768(411G) 173m59.702s 02/16 10:17
james732:上面是我手邊的伺服器跑出來的 (弄到硬碟爆掉...XD) 02/16 10:17
xatier:感謝樓上的測試,辛苦了 02/16 12:46