全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1688
推到 Plurk!
推到 Facebook!

[請問]mem alloc的問題

尚未結案
yungfan
一般會員


發表:25
回覆:13
積分:7
註冊:2003-12-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-19 02:24:58 IP:218.165.xxx.xxx 未訂閱
請問一下各位大大 當宣告如下:
 
    typedef short PCM[2][18][32];
    PCM *pcm_sample;
    pcm_sample = (PCM *) alloc((long) sizeof(PCM));
這三行我有點模糊,能不能詳細的指導一下。 另外有個疑問,就是設一個陣列與alloc一個區塊有什麼不同呢?? 謝謝啦^^ 發表人 - yungfan 於 2004/04/19 02:32:44
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-19 11:16:09 IP:218.32.xxx.xxx 未訂閱
引言: 請問一下各位大大 當宣告如下:
 
    typedef short PCM[2][18][32];
    PCM *pcm_sample;
    pcm_sample = (PCM *) alloc((long) sizeof(PCM));
這三行我有點模糊,能不能詳細的指導一下。 另外有個疑問,就是設一個陣列與alloc一個區塊有什麼不同呢?? 謝謝啦^^
您好, typedef short PCM[2][18][32]; 這一行是指定義一個short的陣列 -- PCM。詳見MSDN中對typedef的解釋。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_clang_Typedef_Declarations.asp PCM *pcm_sample; 這一行是宣告一個PCM陣列的指標pcm_sample。 pcm_sample = (PCM *) alloc((long) sizeof(PCM)); 這一行是向系統要一個PCM空間並指給pcm_sample。 設一個陣列與alloc一個區塊都是向系統要一個連續的記憶體空間。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D -------------------------------
johnjohn
一般會員


發表:6
回覆:59
積分:13
註冊:2004-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-21 21:09:53 IP:203.70.xxx.xxx 未訂閱
宣告一個陣列與malloc最大的差別是在於:    ●malloc是向系統於堆積記憶體(Heap)要一塊你所指定的大小的記憶體 ●宣告一個陣列是向系統於堆疊記憶體(Stack)要一塊你所指定的陣列大小的記憶體    而由於stack中的資料是會不受到保護的,因此當你宣告一個陣列時, e.g.,int a[3];  若你想這樣做: a[3]=1; 你的compilier並不會警告你,然而,原先存在於記憶體位置(a+3)中的資料即會被覆蓋掉.試想,若你覆蓋掉的資料是一個指標變數,那麼.... >>
johnny149
一般會員


發表:0
回覆:13
積分:2
註冊:2004-03-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-28 15:48:36 IP:218.161.xxx.xxx 未訂閱
引言: 請問一下各位大大 當宣告如下: typedef short PCM[2][18][32]; PCM *pcm_sample; pcm_sample = (PCM *) alloc((long) sizeof(PCM)); 這三行我有點模糊,能不能詳細的指導一下。 另外有個疑問,就是設一個陣列與alloc一個區塊有什麼不同呢?? 謝謝啦^^
typedef short PCM[2][18][32]; // 定義一個PCM型態,每一個單位是由一個三維短整數組成 // 每一個單位大小為 2*18*32 個短整數 PCM *pcm_sample; //宣告一個PCM型態的指標pcm_sample。 pcm_sample = (PCM *) alloc((long) sizeof(PCM)); // 是向系統要一塊PCM大小的空間並轉為 PCM 型態 給pcm_sample指到。 陣列空間是跟程式一起載入,alloc 是動態配置。 eg.1 char ss[32000]; eg.2 char *ss; ss = (char *) alloc( 32000 ); 這兩個例子ss可用空間都是32,000Bytes,但例一的.exe就是比較大(約大32K, Why? :D)
yungfan
一般會員


發表:25
回覆:13
積分:7
註冊:2003-12-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-28 23:09:39 IP:218.165.xxx.xxx 未訂閱
陣列空間是跟程式一起載入,alloc 是動態配置。 eg.1 char ss[32000]; eg.2 char *ss; ss = (char *) alloc( 32000 ); 這兩個例子ss可用空間都是32,000Bytes,但例一的.exe就是比較大(約大32K, Why? :D) 先謝謝你的解答啦…我現在觀念比較清楚了… 至於你的問題…我想就如你所說的…一個是跟著程式一起build出來的…一個是執行後才跟os要記憶体…所以會有大小的差別…不知道是不是這樣呢??
johnny149
一般會員


發表:0
回覆:13
積分:2
註冊:2004-03-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-29 08:48:06 IP:218.161.xxx.xxx 未訂閱
引言:陣列空間是跟程式一起載入,alloc 是動態配置。 eg.1 char ss[32000]; eg.2 char *ss; ss = (char *) alloc( 32000 ); 這兩個例子ss可用空間都是32,000Bytes,但例一的.exe就是比較大(約大32K, Why? :D) 先謝謝你的解答啦…我現在觀念比較清楚了… 至於你的問題…我想就如你所說的…一個是跟著程式一起build出來的…一個是執行後才跟os要記憶体…所以會有大小的差別…不知道是不是這樣呢??
正是如此,善用動態配置可以有效節省系統資源。不過指標的使用要小心, 這是要成為高手路上必經的痛。加油哦!
系統時間:2024-07-04 2:39:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!