Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Максимальное использование оперативной памяти 
V
    Опции темы
Trishi
  Дата 12.5.2007, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Как расчитать размерность массива n*n, чтобы максимально использовать оперативную память в Borland С++?
PM MAIL   Вверх
JackYF
Дата 12.5.2007, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Гм... Ну если это дело Borland C++ 3.1, то тогда оперативки у тебя около 640 Кб... квадратный корень из этого дела - 800. Итого - 600-750, я бы посоветовал. Это если массив char. Если int - тогда 300-375.

Если Borland C++ 5.5 и выше, то тогда берешь 80% от размеры оперативки, и делаешь те же самые вычисления.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Anikmar
Дата 12.5.2007, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



ИМХО.
Думаю при Windows реальный размер именно оперативки, выделенной под конкретную задачу, узнать будет проблематично.
Можно узнать ее общий объем, объем виртуалки, а вот, что именно оперативка выделена - это врядли.
PM MAIL ICQ   Вверх
nerezus
Дата 12.5.2007, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

то тогда оперативки у тебя около 640 Кб... 
 64 кило, т.к. размер указателя 16бит )
итого 250х250 примерно для char, т.к. немного под другие переменные надо оставить.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 12.5.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Anikmar
SEH + сканирование пользовательского адресного пространства
0x00000000 - 0x7FFFFFFF (3:1)
или
0x00000000 - 0xBFFFFFFF (2:2)
Код

unsigned long ptr = 0, memory = 0;
unsigned char value;
for (; ptr < 0x80000000; ptr += PAGE_SIZE) {
    __try {
        value = *(unsigned char*)ptr; /* try to generate #PF */
        memory += PAGE_SIZE;
    } __except(EXCEPTION_ACCESS_VIOLATION) {}
}

 smile 

Это сообщение отредактировал(а) MAKCim - 12.5.2007, 11:18


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
W4FhLF
Дата 12.5.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(MAKCim @  12.5.2007,  11:11 Найти цитируемый пост)
0x00000000


0x00010000 я полагаю smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
MAKCim
Дата 12.5.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



W4FhLF
да без разницы, я особо не в курсе распределения ресурсов в пользовательском адресном пространстве
M$ Window$, если она что-то резервирует для нулевых адресов, то да, для увеличения производительности можно отсечь заранее невалидные адреса


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Trishi
Дата 12.5.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Цитата(JackYF @ 12.5.2007,  01:44)
Ну если это дело Borland C++ 3.1, то тогда оперативки у тебя около 640 Кб...

Откуда вы взяли, что именно 640 Кб? Это не зависит от размера моей оперативы в компе? smile 


Цитата(nerezus @ 12.5.2007,  08:08)

 64 кило, т.к. размер указателя 16бит

Если честно, невижу связи между размером оперативной памяти и размером указателя smile Поясните пожалуйста
PM MAIL   Вверх
MAKCim
Дата 12.5.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Trishi @  12.5.2007,  16:19 Найти цитируемый пост)
Откуда вы взяли, что именно 640 Кб? Это не зависит от размера моей оперативы в компе?

не зависит, задача будет выполняться в виртуальном режиме с эмуляцией 1Mb памяти, причем валидным будет только диапозон
0x00000 - 0x9FFFF, что и есть 640Kb
0xA0000 - 0xBFFFF - VGA буфер
0xC0000 - 0xDFFFF - extended area
0xE0000 - 0xFFFFF - BIOS


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Trishi
Дата 13.5.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



Цитата(JackYF @ 12.5.2007,  01:44)
Если int - тогда 300-375.

А я считала - у меня получилось где-то n=570 для int. Я сначала в байты перевела - получила 655360 байт. Потом на 2 делила потому что в int 2 байта. А потом корень брала. А как у вас получилось такое число?

А программе именно в С вообще больше n=180 пишет, что массив слишком велик

Это сообщение отредактировал(а) Trishi - 13.5.2007, 18:43
PM MAIL   Вверх
JackYF
Дата 14.5.2007, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Trishi @  13.5.2007,  18:07 Найти цитируемый пост)
Потом на 2 делила потому что в int 2 байта.

Тьфу блин... это же дос-режим... тут int 2 байта, а не 4. Пардон, тогда конечно - порядка 500-600.



Цитата(Trishi @  13.5.2007,  18:07 Найти цитируемый пост)
А программе именно в С вообще больше n=180 пишет, что массив слишком велик

А это еще от компилятора зависит и от настроек виртуального режима. Но раз пишет - значит, ему доступно...
всего лишь около 180х180 х2 = 64800 байт.

Похоже, что в данном случае прав был nezerus. Хотя я тонкостей 16-битного режима не знаю.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dizzy1984
Дата 14.5.2007, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Будет даже меньше 640кб, т.к bc++3.1 не умеер работать с указателями больше 64кб.
Поскольку его арифметика указателей не рассчитана на модификацию сегментной части.
Поэтому самое удобное - char arr[65536 - 4]

Можно, впрочем, сделать собственную обработку операций -- и ++, благо 
char far *arr  = (char far *)farmalloc(65536l * 8) сделает ожидаемое.
И компилировать программу лучше непосредственно из дос, т.к борландовская ide занимает 
1-ну или 2-е страницы памяти.
PM MAIL   Вверх
dumb
Дата 14.5.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(dizzy1984 @  14.5.2007,  06:46 Найти цитируемый пост)
т.к борландовская ide занимает 
1-ну или 2-е страницы памяти.

это сколько в граммах? и что есть страница в досе? smile

Цитата(dizzy1984 @  14.5.2007,  06:46 Найти цитируемый пост)
компилировать программу лучше непосредственно из дос

не совсем понял, какая связь между занимаемой ide памятью и процессом компиляции?

PM MAIL   Вверх
dizzy1984
Дата 14.5.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(dumb @  14.5.2007,  09:35 Найти цитируемый пост)
это сколько в граммах?

Сейчас нигде не могу найти но насколько помню в реальном режиме величина, кратная 16 байт - параграф, 65536 - страница. 

Цитата(dumb @  14.5.2007,  09:35 Найти цитируемый пост)
не совсем понял, какая связь между занимаемой ide памятью и процессом компиляции?

Никакой я просто описАлся, не компилировать, а запускать.


Это сообщение отредактировал(а) dizzy1984 - 14.5.2007, 16:25
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1282 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.