作者CindyLinz (Cindy Wang)
看板C_and_CPP
標題Re: [問題] 龐大的二維矩陣建立
時間Sun Jun 26 17:03:19 2011
※ 引述《CindyLinz (Cindy Wang)》之銘言:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 210.242.246.249
: → james732:第二個方法的記憶體好像比較接近 int array[15000][40]; 06/25 22:53
: 推 VictorTom:小弟我每次要寫第二種方法那種pointer的宣告都要試誤個 06/25 23:04
: → VictorTom:半天....Orz 06/25 23:04
: → james732:其實第二個我也沒用過....XDD 06/25 23:05
: 推 ledia:!! 06/25 23:10
: → loveme00835:注意(2)的最低維一定要是個正整數常數, 這兩個不等價 06/25 23:43
: → loveme00835:應該說除了最高維以外都要 06/25 23:49
: 推 somi:問 要怎麼把vim的syntax coloring貼到bbs上啊 06/26 01:31
: → loveme00835:自己打色碼 06/26 01:32
: → CindyLinz:pietty 的「貼上指定格式」 06/26 13:14
: → angleevil:用第一個吧!總覺得第二個散發未定義的氣息... 06/26 14:15
: 推 purpose:http://msdn.microsoft.com/en-us/library/kewsb8ba.aspx 06/26 14:21
: → purpose:缺點就是板主妹說得那樣,如果要 new 出一個多維陣列 06/26 14:22
: → purpose:那麼其他維度要受限制,不能用成變數,在 Runtime 才去決 06/26 14:23
: → purpose:定。反之,第一種方法可在 Runtime 決定 06/26 14:23
: → angleevil:我剛剛看了purpose的連結,它說第一維的空間可以為0 06/26 14:37
: → angleevil:~"~這樣設計的邏輯在? 06/26 14:37
它說明寫說可以得到一個 unique pointer :p
大概可以用來當作 in-process 的一種 uuid 用吧 XD
大小為 0 的陣列, 如果不是用在 allocate 記憶體的話,
以前修資料庫系統的時候, 我在作業的範例程式裡面看到類似這樣的用法:
#include <stdio.h>
typedef struct {
int heap[
1024];
int stack[
0];
} data_t;
int main(){
data_t data;
int i;
for(i=
0; i<
1024; ++i)
data.heap[i] = i;
printf(
"%d\n", data.stack[-
1]);
/* 1023 */
printf(
"%d\n", data.stack[-
10]);
/* 1014 */
printf(
"%d\n", data.stack[-
1000]);
/* 24 */
printf(
"%d\n", data.stack[-
1024]);
/* 0 */
return 0;
}
也就是可以把 stack 當成一個 index 方向倒過來的陣列用,
而且 stack 本身沒有額外佔空間.
(額外用一個 int* 的話會佔一個指標的空間)
: → firejox:我記得那是很神奇的東西...XD 06/26 14:45
: → firejox:其實還有一個是 int *array = new int[15000*40]; 06/26 14:52
: 推 purpose:第一維的大小為 0 大概是指標,不重要 06/26 16:16
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.242.246.249
推 angleevil:真的是神奇的東西,其實我在精華區或討論,看過ㄧ堆 06/26 17:16
→ angleevil:但是每次得到感受是驚奇阿... 06/26 17:16
→ loveme00835:就說是未定義行為.... 06/26 21:46
推 xatier:struct hacking 06/27 10:20
※ 編輯: CindyLinz 來自: 210.242.246.249 (09/10 13:18)