English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

float **FMatrix(int row, int col)
{
float **m;
int i;
m = (float**) malloc( row * sizeof(float*) );
if(m == NULL)
{
printf(\"memory allocating failed in function FMatrix(1)\\n\");
exit(0);
}
for(i=0; i <= row-1; i++)
{
m[i] = (float*) malloc( col * sizeof(float) );
if (m[i] == NULL)
{
printf(\"memory allocating failed in function FMatrix at (%d)\\n\", i);
exit(0);
}
}
return m;
}
這個函數是給定列跟行數,會回傳一個row 列col 行的陣列的指標。
之前用沒問到,直到最近要解一個很大的線性系統,當row跟col 的值各為141^2 時,在i=18523 之後,malloc 就失敗了,我試驗了一下,row 跟col 的值越大,失敗時的i 就越小,所以我猜malloc 在使用在有個上限。

是嗎?如果有這個問題,請問該如何解決?謝謝。

2006-07-25 18:02:47 · 3 個解答 · 發問者 hongda.yen 1 in 電腦與網際網路 程式設計

我是用linux 寫程式的,剛剛查了一下資料,有沒有可能是核心對proccess 的記憶體使用量限制?

自已先來編個kernel 試試!

2006-07-25 18:10:46 · update #1

3 個解答

malloc 當然有上限!
malloc(size_t size)
用 size_t t;
sizeof(t); 來知道 t 用了幾 byte,就可知道它的上限!
如:t = 4, 那上限就是 4 => 2^(4*8) (舊的可能會再 / 2)

硬要配置 [141^2, 141^2] 這東東現代常用的電腦〝不能解決〞!
要,請找 sparse matrix 的東東,有非常多種的 sparse matrix 的 algorithm 可以用!
找找看,哪個您適用!

祝 成功。 ^_^

2006-07-26 11:40:05 補充:
現在才看到你們下面有討論,真不好意思。就是因為 RAM 不夠!!沒錯!!所以,才會〝硬要配置〝不能解決〞〞!用 sparse matrix 的演算法去解決吧!我只寫過 tridiagonal 和 triangular 的騙人的 sparse matrix!就我所知,每個 sparse matrix 都有它的特性,你要針對它的特性來做演算法。

2006-07-26 07:36:16 · answer #1 · answered by ? 7 · 0 0

這個我知道^_^,我只是沒有把free 給寫上去。我後來算了一下,float 的記憶體空間是4bytes,當我設row 跟col 為141^2 時,大約要用掉1.5G 的ram,看來是ram 不夠的關係。

明天會把程式拿去系上主機試試,希望能ok。

2006-07-25 18:57:37 · answer #2 · answered by hongda.yen 1 · 0 0

我只知道用完 malloc 之後要 free(),
要不然會記憶體不夠的...

malloc 是跟記憶體要一塊位址,
所以是看你記憶體有多大決定的吧 @@"

2006-07-25 18:32:20 · answer #3 · answered by 榮章 4 · 0 0

fedest.com, questions and answers