BCB buffer 大小? |
答題得分者是:ddy
|
kk_9951
一般會員 發表:5 回覆:3 積分:1 註冊:2006-08-30 發送簡訊給我 |
|
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
|
kk_9951
一般會員 發表:5 回覆:3 積分:1 註冊:2006-08-30 發送簡訊給我 |
|
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
忘了 k 的存在 QQ
stack over flow 超過 stack 所能容納的大小 可以宣告動態二維或動態三維來解決 不使用 stack 而用 heap 來解決
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。 |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
AndrewK 說的對
但是…我很好奇的是…是什麼資料要用到 1G 的buffer 空間 記憶體是很便宜啦…但是這樣的做法個人是覺不妥 考慮 memory-mapped file 吧 ===================引 用 kk_9951 文 章=================== BCB 有限制開啟 buffer 大小嗎? byte DataBuffer[32*1024*1024]; // 32Mbyte buffer <= OK byte DataBuffer[1024*1024*1024]; // 1Gbyte buffer <= error |
kk_9951
一般會員 發表:5 回覆:3 積分:1 註冊:2006-08-30 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
好吧,寫了小範例給你看…我承認~~~看那一堆MSDN文件很痛苦…所以還是寫了小範例
但是至少你要做的功課就是看懂,並且了解每一個參數與常數的函意 很快就能運用自如了 [code cpp] void __fastcall TForm1::Button2Click(TObject *Sender) {//建立測試文字檔 FILE *fp; unsigned int count = 1000 * 1000 * 1000; fp = fopen("C:\\text.txt","w"); for (int i=0;i char c = 'A' (i&); fprintf(fp,"%c",c); if (c == 'Z') { fprintf(fp,"\n"); } Application->ProcessMessages(); } fclose(fp); ShowMessage("Create text.txt ok") ; } void __fastcall TForm1::Button1Click(TObject *Sender) { //建立 HANDLE hFile = CreateFile("C:\\text.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { ShowMessage("File open fail); return; } unsigned long fileSize = GetFileSize(hFile,NULL); HANDLE hMap = CreateFileMapping (hFile, NULL, PAGE_READWRITE, 0, fileSize 1, NULL); if (hMap == NULL) { ShowMessage("Create File mapping fail"); CloseHandle(hFile); return; } void *mvFile = MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0); if (mvFile == NULL) { ShowMessage("Mapping fail"); CloseHandle(hMap); CloseHandle(hFile); return; } //操作 char *mem = (char*)mvFile; for (int i=0;i<10000;i ) { if (isupper(mem[i])) mem[i] = tolower(mem[i]); else mem[i] = toupper(mem[i]); } //Close file mapping UnmapViewOfFile(mvFile); CloseHandle(hMap); CloseHandle(hFile); ShowMessage("ok"); } [/code] 這個範例裡,我事先以程式產生1000MB 的文字檔,內容由A到Z 以memory-mapped file 讀入後,並改變大小寫,你可以觀察用buffer讀入的方式與memory-mapped file 的方式在時間上的差別 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |