Re: [問題] 柔性陣列用途

看板C_and_CPP (C/C++)作者 (今、そこに いる僕)時間15年前 (2011/04/20 21:35), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《tropical72 (藍影)》之銘言: : 近來翻了本書介紹 C 一些技巧/注意事項, : 其中提到了柔性陣列 : typedef struct tagFArray{ : int num; : int arr[0]; : }FArray; : #define N 100 : FArray f = (tagFarray*)malloc(sizeof(FArray) + N*sizeof(int)); : for(int i=0; i!=N; ++i) f->arr[i] = i; : 這種方式似乎與 struct 用 int* arr = (int*)malloc(sizeof(int)); 沒兩樣, : 但一直感覺不出它的方便性 (也可能是我都沒用過) : 不知有經驗 / 其它想法的版友能否提示, 在哪種地方看過? : 謝謝各位指教 這是用C/C++不檢查邊界的特性搞出來的東西... 好處在於你可以隨便分一塊夠大的記憶體, 當成後台。然後套用不同陣列下去玩。 比如說: #define LEN_IN_BYTE 65536 typedef struct {int nLen; long nArr[1];} longarr_t; typedef struct {int nLen; char nArr[1];} chararr_t; char *pBack=(char *)malloc(LEN_IN_BYTE*sizeof(char)+sizeof(int)); longarr_t *pArr0=(longarr_t *)pBack; chararr_t *pArr1=(chararr_t *)pBack; pArr0->nLen=100; pArr0->nArr[0]=...; ... pArr1->nLen=400; pArr1->nArr[0]=...; ... 這在寫Driver或Firmware時常用, 因為常常用同一塊記憶體當成不同函數的工作區來用。 有一定的便利性, 但是要是不小心會讓程式更亂。當你記憶體有限(如核心模式), 就會常 常這樣用了, 如果有看過WDM, 應該對那塊DriverObject印象深刻(每個IRP都拿它來輸出入 )。 --               裸になって                                                   何が悪い?      -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.57.76

04/20 22:01, , 1F
謝謝 C 大說明 ^^
04/20 22:01, 1F
文章代碼(AID): #1Dhk4DCV (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1Dhk4DCV (C_and_CPP)