Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
По поводу отключения гибернации… Вместо него всегда использую режим сна. Нравится тем, что засыпает и просыпается моментально.
Windows 7 will disable disk defragmentation on SSD system drives. Because SSDs perform extremely well on random read operations, defragmenting files isn’t helpful enough to warrant the added disk writing defragmentation produces. The FAQ section below has some additional details.
Be default, Windows 7 will disable Superfetch, ReadyBoost, as well as boot and application launch prefetching on SSDs with good random read, random write and flush performance. These technologies were all designed to improve performance on traditional HDDs, where random read performance could easily be a major bottleneck. See the FAQ section for more details.
Hibernation follows a similar pattern. Hibernating the operating system means dumping the entire contents of memory into the hibernation file; restoring from hibernation entails sucking that file back into memory and pretending nothing happened. Again, it's another chicken-and-egg problem: to load the hibernation file, you need the file system driver, but the file system driver is in the hibernation file. If you keep the hibernation file in the root directory of the boot drive, the miniature file system driver can be used instead.



Старенький вертекс-2 (работает года два):
контроль начат: Сентябрь 07, 2012
Work time: 7 месяцев 18 дней 8 часов
Другие идеи и советы крайне приветствуются!
Потому что не первый и не второй и даже не десятый раз эти темы обмусоливаются.
Гуглите.
As an alternative to dynamic allocation, the process can simply commit the entire region instead of only reserving it. Both methods result in the same physical memory usage because committed pages do not consume any physical storage until they are first accessed. The advantage of dynamic allocation is that it minimizes the total number of committed pages on the system. For very large allocations, pre-committing an entire allocation can cause the system to run out of committable pages, resulting in virtual memory allocation failures.
When memory is committed, physical pages of memory are allocated and space is reserved in a pagefile.
Такой двухэтапный процесс (резервирование и передача) помогает снизить нагрузку на память, откладывая передачу страниц до реальной необходимости в них. Резервирование памяти — операция относительно быстрая и не требующая большого количества ресурсов, поскольку в данном случае не расходуется ни физическая память (драгоценный системный ресурс), ни квота процесса на ресурсы страничного файла (число страниц, передаваемых процессу из страничного файла). При этом нужно создать или обновить лишь сравнительно небольшие внутренние структуры данных, отражающие состояние адресного пространства процесса. (Об этих структурах данных, называемых дескрипторами виртуальных адресов, или VAD, мы расскажем потом.)(отсюда).
Local/Global. API существуют с одной целью — обратная совместимость, и сами они реализованы через VirtualAlloc, логика работы которого тоже менялась со временем
CRT — это вообще другой уровень, это код внутри самого процесса
Про MEM_RESERVE вы всё поняли верно. А про COMMIT — нет. Что бы понять отлтичие, нужно знать как устроены структуры диспетчера памяти. По ссылке, всё есть, читайте про структуры адресного пространства — VAD, PTE.
Когда вы вызываете VirtualAlloc с флагом COMMIT вы отъедаете КВОТУ (а не саму память) ПРОЦЕССА (а не операционной системы) на ресурсы, резервируя элементы из каталога страниц процесса
Т.е. если вы будете мельчить с вызовами VirualAlloc(COMMIT) то вы просто потеряете возможность выделять память изнутри самого процесса, по тому что негде будет это выделение описать.
Остальные процессы при этом совершенно никак не затрагиваются.
Хороший прмер — если в приложении утечка памяти, то рано или поздно посыпятся сообщения об ошибках вроде «Out Of Memory», но посыпятся то они только из одного процесса, а не изо всех сразу.
add-type -Namespace Win32 -Name Mapping -MemberDefinition @"
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr CreateFileMapping(
IntPtr hFile,
IntPtr lpFileMappingAttributes,
uint flProtect,
uint dwMaximumSizeHigh,
uint dwMaximumSizeLow,
[MarshalAs(UnmanagedType.LPTStr)] string lpName);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr MapViewOfFile(
IntPtr hFileMappingObject,
uint dwDesiredAccess,
uint dwFileOffsetHigh,
uint dwFileOffsetLow,
uint dwNumberOfBytesToMap);
"@
$mapping = [Win32.Mapping]::CreateFileMapping(-1, 0, 2, 1, 0, $null)
[Win32.Mapping]::MapViewOfFile($mapping, 4, 0, 0, 3Gb)

SSD Mini Tweaker.
Оптимизация Windows для использования SSD диска: мифы и реальность