Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 105

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Как определить склько всего оперативной памяти и сколько свободно, если в компе 4Гб и более ОЗУ. Приведенный код показывает неверные значения.

Приложение:
  1.  
  2. function TotalMemoryPhysical: string;
  3. var lpMemoryStatus : TMemoryStatus;
  4. begin
  5. lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
  6. GlobalMemoryStatus(lpMemoryStatus);
  7.  
  8. end;
  9.  
  10.  
  11. function FreeMemoryPhysical: string;
  12. var lpMemoryStatus : TMemoryStatus;
  13. begin
  14. lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
  15. GlobalMemoryStatus(lpMemoryStatus);
  16.  
  17.  
  18. end;


gm44 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

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

gm44 (статус: Посетитель), 20 августа 2009, 12:40 [#5]:

Данный код выводит какуюту охинею:
Всего памяти 2048 мб.
Свободно памяти 2048 мб.
Вадим К

Вадим К (статус: Академик), 20 августа 2009, 12:50 [#6]:

а почему сразу так.... изучите устройство операционной системы и поймете, что Вашему приложения по умолчанию есть доступ только к 2Гб памяти. Если при загрузке Windows передать ей специальный ключ, то можно до 3 Гб увеличить.
К сожалению у меня нет машины с windows с таким кол-вом памяти (на линуксе есть и с 8 Гб, но не буду же я туда устанавливать ещё и Windows, что бы проверить свои предположения).

А вот то, что показывает физической памяти 2Гб... это странно. Хотя возможно упирается в тип Integer... Надо поискать дома литературу.
Кто 10 лет назад знал, что на декстопе будет 4 Гб памяти - это считалось непостежимым...
Галочка "подтверждения прочтения" - вселенское зло.
gm44

gm44 (статус: Посетитель), 20 августа 2009, 14:25 [#7]:

Дело в том, что я пишу программу которая собирает информацию о коме, использовать сторонний софт нет возможности так как эта програма будет входить в состав другого програмного комплекса. Все реализовал, а вот на ОЗУ споткнулся... но как тоже другие проги это делают, тот же Everest...
Так же хочу сказать спасибо Вадиму К. так как ответы на свои вопросы на этом сайте получаю восновно от него.
Anderson N.N

Anderson N.N (статус: 2-ой класс), 20 августа 2009, 16:04 [#8]:

Посмотри тут:

http://winbasic.info/pages-183.html
gm44

gm44 (статус: Посетитель), 20 августа 2009, 17:19 [#9]:

К сожалению эффект тот же...
gm44

gm44 (статус: Посетитель), 21 августа 2009, 10:39 [#10]:

Вадим, спасибо! То что надо.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.02 сек.