|
Вопрос # 3 105/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Как определить склько всего оперативной памяти и сколько свободно, если в компе 4Гб и более ОЗУ. Приведенный код показывает неверные значения.
Приложение: Переключить в обычный режим-
- function TotalMemoryPhysical: string;
- var lpMemoryStatus : TMemoryStatus;
- begin
- lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
- GlobalMemoryStatus(lpMemoryStatus);
-
- end;
-
-
- function FreeMemoryPhysical: string;
- var lpMemoryStatus : TMemoryStatus;
- begin
- lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
- GlobalMemoryStatus(lpMemoryStatus);
-
-
- end;
 |
Вопрос задал: gm44 (статус: Посетитель)
Вопрос отправлен: 20 августа 2009, 11:39
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, gm44!
Поискал по задворкам и нашел. Надо использовать функцию GlobalMemoryStatusEx. Примеры кода/описание тут
http://podgoretsky.com/ftp/Docs/Delphi/Memory/virtual/GlobalMemoryStatusEx.html
https://forums.codegear.com/thread.jspa?threadID=2502
http://www.delphisources.ru/forum/showthread.php?t=4798
http://www.delphipraxis.net/post729871.html
просмотрите все ссілки, потом будет понимание.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 20 августа 2009, 17:39
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 21 августа 2009, 10:39; участников в обсуждении: 4.
20 августа 2009, 11:46: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с устройствами и "железом" модератором Ерёмин А.А.
|
Вадим К (статус: Академик), 20 августа 2009, 11:54 [#1]:
А больше 4 гигабайт и не получиться "узнать" этим кодом. Вся причина в том, что переменная, которая возвращает кол-во памяти - на 4 байта... То есть тем кодом, который приведён - никак.
Операционная система 32 битная или 64? если 32битная, то даже операционная система не видит больше 3.5 гигабайт (а если и видит, то использовать не может). В современных процессорах с поддержкой EMT процессор может адресовать больше 4Гб памяти, но одно приложение не может использовать такой объем сразу. (если специально код не писать, то не может).
Для начала проверьте, видят ли утилиты типа Everest/Aida такое кол-во памяти.
Андрей, я не согласен с перемещением вопроса. Мне кажеться начальная тематика всё таки правильная.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 20 августа 2009, 12:25 [#2]:
Инфо о коме.
windows Windows Server 2003 R2, Standart Edition
сервис пак Service Pack 2
бит 32
билд 3790
ОЗУ 4 ГБ
Процессор Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
ядра 8
Everest - нормально определи пишет 4 гб.
В свойствах системы тоже 4 гб.
|
|
Вадим К (статус: Академик), 20 августа 2009, 12:29 [#3]:
То что физически памяти 4гига, еще не значит, что она вся используется. поэтому, скорее всего вышеприведенный код отображает правильные цифры. должно быть доступной памяти 3.3-3.5Гб.
Приведите пожалуйста вывод Вашего кода.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ерёмин А.А. (статус: *Администратор), 20 августа 2009, 12:30 [#4]:
Вадим, теоретически правильны обе - и к Windows отношение имеет, и к железке. Но одновременно двух быть не может. Пусть останется эта, тем более что ваше обсуждение как раз ушло в железную тематику
|
|
gm44 (статус: Посетитель), 20 августа 2009, 12:40 [#5]:
Данный код выводит какуюту охинею:
Всего памяти 2048 мб.
Свободно памяти 2048 мб.
|
|
Вадим К (статус: Академик), 20 августа 2009, 12:50 [#6]:
а почему сразу так.... изучите устройство операционной системы и поймете, что Вашему приложения по умолчанию есть доступ только к 2Гб памяти. Если при загрузке Windows передать ей специальный ключ, то можно до 3 Гб увеличить.
К сожалению у меня нет машины с windows с таким кол-вом памяти (на линуксе есть и с 8 Гб, но не буду же я туда устанавливать ещё и Windows, что бы проверить свои предположения).
А вот то, что показывает физической памяти 2Гб... это странно. Хотя возможно упирается в тип Integer... Надо поискать дома литературу.
Кто 10 лет назад знал, что на декстопе будет 4 Гб памяти - это считалось непостежимым...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 20 августа 2009, 14:25 [#7]:
Дело в том, что я пишу программу которая собирает информацию о коме, использовать сторонний софт нет возможности так как эта програма будет входить в состав другого програмного комплекса. Все реализовал, а вот на ОЗУ споткнулся... но как тоже другие проги это делают, тот же Everest...
Так же хочу сказать спасибо Вадиму К. так как ответы на свои вопросы на этом сайте получаю восновно от него.
|
|
gm44 (статус: Посетитель), 20 августа 2009, 17:19 [#9]:
К сожалению эффект тот же...
|
|
gm44 (статус: Посетитель), 21 августа 2009, 10:39 [#10]:
Вадим, спасибо! То что надо.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|