| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Максимальное использование оперативной памяти |
| Автор: Trishi 12.5.2007, 00:14 |
| Как расчитать размерность массива n*n, чтобы максимально использовать оперативную память в Borland С++? |
| Автор: JackYF 12.5.2007, 01:44 |
| Гм... Ну если это дело Borland C++ 3.1, то тогда оперативки у тебя около 640 Кб... квадратный корень из этого дела - 800. Итого - 600-750, я бы посоветовал. Это если массив char. Если int - тогда 300-375. Если Borland C++ 5.5 и выше, то тогда берешь 80% от размеры оперативки, и делаешь те же самые вычисления. |
| Автор: Anikmar 12.5.2007, 02:01 |
| ИМХО. Думаю при Windows реальный размер именно оперативки, выделенной под конкретную задачу, узнать будет проблематично. Можно узнать ее общий объем, объем виртуалки, а вот, что именно оперативка выделена - это врядли. |
| Автор: nerezus 12.5.2007, 08:08 | ||
итого 250х250 примерно для char, т.к. немного под другие переменные надо оставить. |
| Автор: MAKCim 12.5.2007, 11:11 | ||
| Anikmar, SEH + сканирование пользовательского адресного пространства 0x00000000 - 0x7FFFFFFF (3:1) или 0x00000000 - 0xBFFFFFFF (2:2)
|
| Автор: W4FhLF 12.5.2007, 11:14 |
0x00010000 я полагаю |
| Автор: MAKCim 12.5.2007, 11:23 |
| W4FhLF, да без разницы, я особо не в курсе распределения ресурсов в пользовательском адресном пространстве M$ Window$, если она что-то резервирует для нулевых адресов, то да, для увеличения производительности можно отсечь заранее невалидные адреса |
| Автор: Trishi 12.5.2007, 16:19 | ||||
Откуда вы взяли, что именно 640 Кб? Это не зависит от размера моей оперативы в компе?
Если честно, невижу связи между размером оперативной памяти и размером указателя |
| Автор: Trishi 13.5.2007, 18:07 | ||
А я считала - у меня получилось где-то n=570 для int. Я сначала в байты перевела - получила 655360 байт. Потом на 2 делила потому что в int 2 байта. А потом корень брала. А как у вас получилось такое число? А программе именно в С вообще больше n=180 пишет, что массив слишком велик |
| Автор: JackYF 14.5.2007, 02:58 | ||
Тьфу блин... это же дос-режим... тут int 2 байта, а не 4. Пардон, тогда конечно - порядка 500-600.
А это еще от компилятора зависит и от настроек виртуального режима. Но раз пишет - значит, ему доступно... всего лишь около 180х180 х2 = 64800 байт. Похоже, что в данном случае прав был nezerus. Хотя я тонкостей 16-битного режима не знаю. |
| Автор: dizzy1984 14.5.2007, 06:46 |
| Будет даже меньше 640кб, т.к bc++3.1 не умеер работать с указателями больше 64кб. Поскольку его арифметика указателей не рассчитана на модификацию сегментной части. Поэтому самое удобное - char arr[65536 - 4] Можно, впрочем, сделать собственную обработку операций -- и ++, благо char far *arr = (char far *)farmalloc(65536l * 8) сделает ожидаемое. И компилировать программу лучше непосредственно из дос, т.к борландовская ide занимает 1-ну или 2-е страницы памяти. |
| Автор: dumb 14.5.2007, 09:35 |
это сколько в граммах? и что есть страница в досе? не совсем понял, какая связь между занимаемой ide памятью и процессом компиляции? |
| Автор: dizzy1984 14.5.2007, 16:22 | ||
Сейчас нигде не могу найти но насколько помню в реальном режиме величина, кратная 16 байт - параграф, 65536 - страница.
Никакой я просто описАлся, не компилировать, а запускать. |