Вывод количества оперативной памяти на консоль.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Frairs
Сообщения: 19
Зарегистрирован: 25 фев 2013, 20:04

Хочу вывести сколько оперативной памяти в компьютере. Обращаюсь к функции WinAIP:

Код: Выделить всё

VOID GlobalMemoryStatus(
	  LPMEMORYSTATUS lpBuffer   // указатель на структуру MEMORYSTATUS
	);

	typedef struct _MEMORYSTATUS { 
    	DWORD dwLength;                  // длина структуры в байтах
    	DWORD dwMemoryLoad; 		 // загрузка памяти в процентах		
    	SIZE_T dwTotalPhys;              // максимальное количество физической памяти в байтах
    	SIZE_T dwAvailPhys;              // свободное количество физической памяти в байтах
    	SIZE_T dwTotalPageFile;          // макс. кол. памяти для программ в байтах
    	SIZE_T dwAvailPageFile;          // свободное кол. памяти для программ в байтах
    	SIZE_T dwTotalVirtual;           // максимальное количество виртуальной памяти в байтах
    	SIZE_T dwAvailVirtual; 		 // свободное количество виртуальной памяти в байтах
	} MEMORYSTATUS, *LPMEMORYSTATUS; 
У самого стоит 64 разрядная семёрка, максимальная. Естественно оперативной памяти 4гб, знаю что эта функция больше двух не увидит. Но он у меня выводит 3гб, во первых не правильно, во вторых как? В третих 3 гб везде, даже на 32 разрядной...

Код такой:

Код: Выделить всё

MEMORYSTATUS memstat;
 memstat.dwLength = sizeof(memstat);

cout << "Память: " << memstat.dwTotalPhys/ 1073741824 << " GB";


Я не знаю почему... Пробовал вывести с помощью MEMORYSTATUSEX. Мало того что её пришлось написать вручную, указать программе что вот есть такая штука, а то она не определена. И всё равно выводит не правильно. Помогите, я уже голову сломал.
serge_sb
Сообщения: 3
Зарегистрирован: 25 апр 2013, 01:56

Сдается мне, вы делаете целочисленное деление тут:
cout << "Память: " << memstat.dwTotalPhys/ 1073741824 << " GB";
И вся дробная часть результата отбрасывается :)
Ответить