|
|
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Вопрос такой: Программа работает абсолютно корректно на сравнительно небольших объемах данных (около сотни). НО! При задании большого (десятки тысяч) объема данных появляется сообщение "Out of memory" Думаю, используется стандартная модель памяти и в последнем случае данные не влезают в допустимый диапазон. К сожалению все данные нужно держать вместе, а не читать кусками, кроме того используется тип long double, иначе точности не хватит. Как можно увеличить допустимый диапазон или снять на него ограничение совсем, т.е. использовать "HUGE в Win32"? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 18:18 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Проблема не в количестве данных, а в коде. Переполнение какое-то и т.д. Приведи, постораюсь помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 18:48 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Попробуйте увеличить размер стека в опциях компилятора. "Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2005, 23:51 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
мне тоже кажется что проблема все таки в коде .. а не в опциях компилятора .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 07:47 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Код в студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 10:46 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Вообщем, облом происходит в этой точке (ставил breakpoint-ы) a=new long double* [m]; for ( i=0;i<m;i++) { a =new long double[n]; }; где m=11000 n=130000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 21:50 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Cергей1111Вообщем, облом происходит в этой точке (ставил breakpoint-ы) a=new long double* [m]; for ( i=0;i<m;i++) { a =new long double[n]; }; где m=11000 n=130000 Извините, ошибся n=130000000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 21:53 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Cергей1111К сожалению все данные нужно держать вместе, а не читать кусками, кроме того используется тип long double, иначе точности не хватит. Здравствуйте, Сергей! Есть одна небольшая проблема в вашем коде. 11000 * 130000000 * sizeof(long double) = 11440000000000 b ~ 10654 Gb памяти. Я не знаю какими аппаратными ресурсами вы располагаете, но боюсь что опции компилятора вам не помогут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 22:13 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Cергей1111 a=new long double* [m]; // вот в этом месте тратится куча памяти -44000 byte в данном случае for ( i=0;i<m;i++) { a =new long double[n]; // в }; где m=11000 n=130000 Зачем использовать массив указателей ? используйте двумерный массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 14:41 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
MasterZivЗачем использовать массив указателей ? используйте двумерный массив. Просветите меня глупого: что же, в С++ двумерный массив не является массивом указателей (т.е. a[m][n] != m x *a[n]) ? А то умные книжки говорят как раз обратное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:07 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
>> что же, в С++ двумерный массив не является массивом указателей (т.е. a[m][n] != m x *a[n]) ? Память надо выделять одним большим куском и освобождать так же. В умных книжках этого не написано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 16:05 |
|
||
|
Visual C++ (DevStudio) - Out of memory
|
|||
|---|---|---|---|
|
#18+
Станислав C. MasterZivЗачем использовать массив указателей ? используйте двумерный массив. Просветите меня глупого: что же, в С++ двумерный массив не является массивом указателей (т.е. a[m][n] != m x *a[n]) ? А то умные книжки говорят как раз обратное... Не является. двумерный массив объявляется так : double aaa[1234][34536]; Правда, такой массив не вдруг выделишь динамически, т.е. тебе не получиться писать адресацию в нем как aaa [j]; а придется выделять как одномерный массив и писать aaa[i*N+j]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:30 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32864131&tid=2033851]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 404ms |

| 0 / 0 |
