Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/78: Рейтинг темы: голосов - 78, средняя оценка - 4.62
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4

Почему при выделении памяти VirtualAlloc() в диспетчере задач не происходит скачок?

24.10.2020, 01:54. Показов 15561. Ответов 79
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для эксперимента я прошу примерно 50 байт, может немного больше.
C++
1
2
3
4
5
6
int zx=600000000;
char*aa=new char[zx] ;
cout<<"aa "<<(int)aa<<endl;
 
cin>>*aa;cout<<"aa0 "<<(int)*aa<<endl;
delete[]aa;
Происходит скачок примерно на эту величину.
Если так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int zx=600000000;
    int*p=NULL;
    p=(int*)VirtualAlloc(0,zx,MEM_TOP_DOWN  ,PAGE_READWRITE);//MEM_COMMIT 
    if (p)
    {
        cout << "OK Alloc " << endl;
cin>>*p;cout<<"p "<<*p<<en;
if (VirtualFree(p,0,MEM_RELEASE))
            cout << "Ok Free";
        else
            cout << "Not Free" << endl;
    }
    else
        cout << "Error Alloc " << endl;
cin употребляется для задержки чтобы наблюдать за диспетчером задач пока память не освобождена, далее вводим любое число и срабатываю функции освобождения памяти. В диспетчере задач не наблюдается никаких скачков VirtualAlloc специфическая функция, вполне возможно что она даже не выделяет память а резервирует или выделяет её на жёстком диске.
Может ли она выделять физическую память?
Какой флаг лучше использовать MEM_TOP_DOWN или MEM_COMMIT?

Добавлено через 1 минуту
Почему в VirtualFree передаём размер памяти 0 чтобы её освободить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2020, 01:54
Ответы с готовыми решениями:

Почему происходит ошибка при выделении памяти под массив?
Всем привет, почему я не могу выделить память под массив? Вот моя задача : Написать программу, которая реализует метод закрытого...

Что происходит за кулисами при выделении памяти для переменной?
Здравствуйте, уважаемые форумчане! У меня такой вопрос: &quot;Что происходит, когда я объявляю переменную? Я думаю, что когда я объявляю...

Почему при выделении памяти перед malloc явно указывают тип?
Вопрос в заголовке темы. Почему пишут так: short length = 5; char *buffer = (char*)malloc(sizeof(char) * length); Можно же...

79
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
20.06.2021, 04:00  [ТС]
Студворк — интернет-сервис помощи студентам
Вот почитал https://docs.microsoft.com/en-... tualmemory, https://docs.microsoft.com/en-... extensions есть функции которые сопоставляют виртуальную память с физической, или которые позволяют переносить виртуальную память на физическую. Я честно говоря толком не понял, какие конкретно шаги нужно проделать чтобы поместить виртуальную память в ОЗУ.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
20.06.2021, 04:56
Для обычных ("paged") страниц нужно просто обратиться к странице виртуальной памяти: выполнить инструкцию, расположенную на этой странице или прочитать или записать данные. Если странице с адресом V в адресном пространстве процесса аппаратурой трансляции адресов не сопоставлена страница ОЗУ, то произойдёт аппаратное прерывание программы, и супервизор разберётся с ситуацией. Если где-то в ОЗУ присутствует страница с нужным содержимым по физическому адресу A, то в таблицу трансляции запишет, что физический адрес виртуальной страницы V равен A. И выполнение процесса можно возобновить с точки, где он был прерван. А если в ОЗУ нужной страницы нет, то супервизор запланируем "подкачку" страницы, т.е. чтение из файла, в котором хранится содержимое виртуальной страницы процесса, когда она отсутствует в ОЗУ, в неиспользуемую страницу ОЗУ.

Добавлено через 22 минуты
Чтобы разместить в своём адресном пространстве невыгружаемые страницы, Large pages в 64-разрядной программе и AWE в 32-разрядной, процесс

1. Активирует привилегию, позволяющую блокировать страницы в ОЗУ.
2. Добавляет флаг, указанный в документации к AWE или Large pages, вызывая VirtualAlloc*

3. Специальными функциями просит закрепить физические страницы за виртуальными страницами выделенного VirtualAlloc'ом диапазона адресов.

Супервизор находит нужное количество неисполъзуемых физических страниц и проставляет в таблицах соответствие для адресного пространства процесса, который запросил невыгруженные страницы.
1
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
20.06.2021, 07:41  [ТС]
Я так понял что
Цитата Сообщение от politoto Посмотреть сообщение
невыгружаемые страницы
это страницы которые остались в виртуальной памяти и не загрузились в ОЗУ(физическую память)?
Что такое
Цитата Сообщение от politoto Посмотреть сообщение
AWE
тоже не понял.
Цитата Сообщение от politoto Посмотреть сообщение
Для обычных ("paged") страниц нужно просто обратиться к странице виртуальной памяти: выполнить инструкцию, расположенную на этой странице или прочитать или записать данные.
Я записывал данные в это место и всё равно скачка в диспетчере задач не было, значит никакой загрузку в ОЗУ(Физическую память) не происходит хоть и должно.
Цитата Сообщение от politoto Посмотреть сообщение
Если странице с адресом V в адресном пространстве процесса аппаратурой трансляции адресов не сопоставлена страница ОЗУ, то произойдёт аппаратное прерывание программы, и супервизор разберётся с ситуацией.
Происходит автоматически судя по вашим словам? Там куча флагов у этих функций, одни резервируют, одни блокируют. Вот к примеру флаг
MEM_PHYSICAL
Зарезервирует диапазон адресов, который можно использовать для сопоставления страниц Address Windowing Extensions (AWE).
Я не фига из их каши не понял. Они что-то мутное пишут что даже не понятно что и как происходит и что нужно делать.

Добавлено через 2 минуты
Я не могу понять с чего вообще должен происходит захват памяти. Нужно искать виртуальную память и постепенно загружаться в физическую раз уж она предусмотрена и поддерживается центральным процессором мат. платы или можно сразу грузиться в ОЗУ. Вот не понятно. Чёткого ответа на этот вопрос не видел.

Добавлено через 2 минуты
У меня создаётся впечатление что процессор использует одновременно 2 блока памяти виртуальную и физическую это очень странно зачем это делать если можно загрузиться в физическую. Возникает вопрос в какой момент срабатывают алгоритмы сопоставления виртуальной памяти с физической, сразу при загрузке или постоянно на основании того что мы жрём и физическую и виртуальную память. Путаница какае-та.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
20.06.2021, 08:44
Виртуальные (математические, логические ) адреса используются в программах для доступа к инструкциям ( например, функциям C++ ) и данным.
Физические адреса используются для доступа к аппаратуре машины: внутренним и внешним устройствам, модулям RAM, параллельной flash и т. д.

В Windows у каждого процесса свое виртуальное адресное пространство, с момента создания процесса и до его завершения. Никаких блоков памяти пространство не жрет, кроме накладных расходов на таблицы распределения виртуальной памяти. Пространство - это место, где можно что-то разместить.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
20.06.2021, 09:26  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Пространство - это место, где можно что-то разместить.
Значит оно как-то зашифровано плотно упаковано или что раз оно есть то какое-то и значимое назначение у него должно быть.
Если я правильно понял старт захвата памяти происходит с виртуального адресного пространства, но интересно на сколько они отличаются(виртуальное от физического) и в какой и по какой момент где что храниться. Упоминаний про виртуальную память много а вот его полная функциональность и очерёдность действий не совсем ясна.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
20.06.2021, 15:43
Цитата Сообщение от Nexi99 Посмотреть сообщение
в какой и по какой момент где что храниться
Что хранится в номерах телефонов?

Добавлено через 33 минуты
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я записывал данные в это место и всё равно скачка в диспетчере задач не было, значит никакой загрузку в ОЗУ(Физическую память) не происходит хоть и должно.
Для записи по одному адресу достаточно, чтобы присутствовали 1-2 страницы, содержащие перезаписываемые байты. Либо нужна страница уже присутствовала в физической памяти, либо одновременно некоторое количество страниц освободилось и общее количество свободных страниц физической памяти заметно не изменилось. Либо Ваше обращение в это место не было первым.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
20.06.2021, 18:03  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Что хранится в номерах телефонов?
Те же биты, как ни крути память в телефоне занимают особенно если речь идёт о старых телефонах как у меня которые ещё при царе горохе были.
Цитата Сообщение от politoto Посмотреть сообщение
Для записи по одному адресу достаточно, чтобы присутствовали 1-2 страницы, содержащие перезаписываемые байты. Либо нужна страница уже присутствовала в физической памяти, либо одновременно некоторое количество страниц освободилось и общее количество свободных страниц физической памяти заметно не изменилось. Либо Ваше обращение в это место не было первым.
Интересно. Кашу перемешает так что и не поймёшь что происходит. Получается что функции кучи сильнее грузят память?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
21.06.2021, 13:30
Nexi99, Кашу перемешивают функции кучи из отладочной библиотеки.

У меня количество commited страниц виртуальной памяти увеличивается, когда работает new,
а скачок использования физической памяти программой на ph происходит, когда работает цикл, перебирающий страницы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main() try {
 
        size_t v, ph;
 
        std::cin >> v;
        char * ne = new char[v];
 
        std::cin >> ph;
        for ( size_t o = 0; o < ph && o < v; o += 010000 )
                ne[o] = ~ ne[0];
 
        std::cin >>v;
        delete [] ne;
        return v;
 
} catch (...) {
        return -1;
}
Но, если собирать программу с параметром /MDd, отладочный new сам перелопачивает все v байтов, и на v сразу увеличивается рабочий набор страниц физической памяти.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
21.06.2021, 14:21  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
страниц виртуальной памяти
Я так понимаю что выделение виртуальной памяти ограничено и будет влиять на значение которое заполняется функцией GlobalMemoryStatus в структуре MEMORYSTATUS?
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
14.12.2022, 21:05  [ТС]
Цитата Сообщение от _lunar_ Посмотреть сообщение
в Windows уже очень давно закрыт доступ к физической памяти из UserMode
т.е. выделить физическую память прямыми средствами нельзя из-за отсуствия доступа это может делать только ОС при условии что действительно нужна физическая память а не виртуальная? Т.е. система устанавливает приоритет: какие данные могут храниться в виртуальной памяти, а какие можно без ущерба системе загрузить в физическую из-за чего и происходит скачёк в ОЗУ.

Добавлено через 9 минут
Вот ещё хорошее описание
MMU используется только тогда, когда процессор обращается к памяти (например, при промахе кэша), а все остальное время не используется и экономит электроэнергию. Кроме того, в этом случае MMU почти не влияет на быстродействие процессора.
https://ru.bmstu.wiki/index.ph... ew_desktop . Да получается прямого дуступа туда нет он видимо и не нужен. Видимо new принудительно выделяет физическу память, что нужно даже не всегда.

Добавлено через 21 минуту
Да вот ещё такое описание https://learn.microsoft.com/en... tualmemory
Драйверы режима ядра могут использовать NtAllocateVirtualMemory для резервирования диапазона доступных для приложений виртуальных адресов в указанном процессе, а затем выполнять дополнительные вызовы NtAllocateVirtualMemory для фиксации отдельных страниц из зарезервированного диапазона. Это позволяет процессу резервировать диапазон своего виртуального адресного пространства, не потребляя физической памяти до тех пор, пока она не понадобится.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.12.2022, 11:33
Цитата Сообщение от Nexi99 Посмотреть сообщение
система устанавливает приоритет: какие данные могут храниться в виртуальной памяти, а какие можно без ущерба системе загрузить в физическую из-за чего и происходит скачёк в ОЗУ.
Скачок происходит, когда
программа пользователя начинает обращаться к страницам, которые в данный момент отсутствуют в ОЗУ, или пытается изменить содержимое страницы, общей для нескольких процессов (Copy-On-Write)
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.12.2022, 12:21
Цитата Сообщение от Nexi99 Посмотреть сообщение
при условии что действительно нужна физическая память а не виртуальная?
Это какие такие условия? В обычных приложениях?
Опишите эти условия.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
16.12.2022, 02:37  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
когда
программа пользователя начинает обращаться к страницам
Вот есть такая функция AllocateUserPhysicalPages https://learn.microsoft.com/en... sicalpages, она сопоставляет виртуальные страницы с физическими, при этом доступа к адресу нет, этим занимается ядро системы, но он и не нужен, адрес через который пользователь будет обращаться даётся сразу. Если не сопоставить то это произойдёт по тем принципам что вы объяснили мне в этой теме, да и к тому же так написано в инструкции. Если приоритет высокий можно сопоставить.

Добавлено через 5 часов 39 минут
Перепутал там будет другая функция MapUserPhysicalPagesScatter https://learn.microsoft.com/en... gesscatter

Добавлено через 25 минут
Сначала вызываем VirtualAlloc, выдиляем вирт. память, потом функцией AllocateUserPhysicalPages, выдиляем физическую размеры долны совпадать, далее нужно сопоставить страницы функцией MapUserPhysicalPages. Только там завуалированные аргументы.
1
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
17.12.2022, 21:01  [ТС]
Функции указанные выше нужны только в режиме AWE, а так выделение физической памяти происходит при обращении к страницам.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
18.12.2022, 04:09  [ТС]
В общем у меня эксперименты такие.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
MEMORYSTATUSEX STATUSEX;
STATUSEX.dwLength=sizeof(STATUSEX);
 
cout<<"результат вызова-GlobalMemoryStatusEx "<<GlobalMemoryStatusEx(&STATUSEX)<<en;
cout<<"Объем всей физической памяти в байтах STATUSEX.ullTotalPhys "<<STATUSEX.ullTotalPhys<<en;//6440865792
cout<<"Объем физической памяти доступной в настоящее время STATUSEX.ullAvailPhys "<<STATUSEX.ullAvailPhys<<en;//2158534656
cout<<"Объем физической памяти которую использует процесс STATUSEX.ullTotalPageFile "<<STATUSEX.ullTotalPageFile<<en;//9639608320
cout<<"Объем физической памяти которую может использовать процесс STATUSEX.ullAvailPageFile "<<STATUSEX.ullAvailPageFile<<en;
cout<<"Объем свободной STATUSEX.ullAvailVirtual виртуальной памяти STATUSEX.ullAvailVirtual "<<STATUSEX.ullAvailVirtual<<en;
PERFORMANCE_INFORMATION INFORMATION;
INFORMATION.cb=sizeof(INFORMATION);
cout<<"результат вызова-GetPerformanceInfo "<<GetPerformanceInfo(&INFORMATION,INFORMATION.cb)<<en;//6440865792
cout<<"Количество страниц зафиксированных системой которые сопоставлены INFORMATION.CommitTotal "<<INFORMATION.CommitTotal<<en;//VirtualAlloc изменяет это значение
cout<<"Объем фактической физической памяти на страницах(выделены не сопоставлены INFORMATION.PhysicalTotal) "<<INFORMATION.PhysicalTotal<<en;//
cout<<"Размер страницы в байтах-PageSize "<<INFORMATION.PageSize<<en;//
cout<<"Объём всех страниц, объём всей виртуальной памяти в текущий момент INFORMATION.PhysicalAvailable "<<INFORMATION.PhysicalAvailable<<en;//
cout<<INFORMATION.PhysicalAvailable*INFORMATION.PageSize<<en;//
 
cout<<"код ошибки "<<GetLastError()<<en;//MEM_COMMIT|
char*par=(char*)VirtualAlloc(0,INFORMATION.PageSize*3,MEM_COMMIT|MEM_RESERVE,(PAGE_EXECUTE_READWRITE));//|PAGE_EXECUTE_WRITECOPY
cout<<"код ошибки "<<GetLastError()<<en;
 
for(int q=-1;++q<INFORMATION.PageSize;)par[q]=q;
//cout<<q<<" "<<()<<en;
cout<<"результат вызова-GlobalMemoryStatusEx "<<GlobalMemoryStatusEx(&STATUSEX)<<en;
cout<<"результат вызова-GetPerformanceInfo "<<GetPerformanceInfo(&INFORMATION,INFORMATION.cb)<<en;//6440865792
 
cout<<"STATUSEX.ullTotalPhys "<<STATUSEX.ullTotalPhys<<en;//
cout<<"STATUSEX.ullAvailPhys "<<STATUSEX.ullAvailPhys<<en;//
cout<<"STATUSEX.ullTotalPageFile "<<STATUSEX.ullTotalPageFile<<en;//
cout<<"STATUSEX.ullAvailPageFile "<<STATUSEX.ullAvailPageFile<<en;
cout<<"STATUSEX.ullAvailVirtual "<<STATUSEX.ullAvailVirtual<<en;
cout<<"INFORMATION.CommitTotal "<<INFORMATION.CommitTotal<<en;//VirtualAlloc изменяет это значение
cout<<"INFORMATION.PhysicalTotal "<<INFORMATION.PhysicalTotal<<en;//
cout<<"INFORMATION.PhysicalAvailable "<<INFORMATION.PhysicalAvailable<<en;//
 
par[1083]=83;
cout<<(Sh)par[1083]<<en;//87
par[2531]=97;
cout<<(Sh)par[2531]<<en;
После выделения памяти не понятно какая строка на сколько должна поменяться. Я так понимаю что должно быть так.
STATUSEX.ullTotalPhys-остаётся неизменным.
STATUSEX.ullAvailPhys-должен уменьшиться на 12300(примерно). Здесь он уменьшается слишком сильно.
STATUSEX.ullTotalPageFile и STATUSEX.ullAvailPageFile- не понятно что он вообще показывает в обоих случаях.
STATUSEX.ullAvailVirtual-падает слишком сильно. Если память выделяется физическая то виртуальная должна остаться такой же, если Виртуальная то должно упасть на 12300(примерно). А не на миллион.
INFORMATION.CommitTotal-по идее я выделяю 3 страницы памяти. Но это значение не меняется.
INFORMATION.PhysicalTotal-если выделяется виртуальная память а не физическая значение должно измениться на 3, если физическая не измениться.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
21.12.2022, 02:32  [ТС]
В общем ребята. Получились такие результаты. Функция VirtualAlloc оказалось слишком спицифической и я даже бы сказал глуппой. Выделить память можно не более 2Гб. При этом память нельзя выделять прямо, например. Нельзя выделить только виртуальную память и тем более физическую. Была бы от неё польза если бы хотябы можно было выделять виртуальную память, например 1 к одному с имеющейся физической. Но даже и это не реализовано, также не совсем понятно и то что есть физическая память почему нет флага который бы прямо использовал бы её, зачем же тогда покупать планки с ОС памятью если её нельзя использовать. В сети читал пишут что функция даже в файл подкачки не всегда загружает данные.
В инструкции написано что можно выделять память от 2 до 4 Гб но там нужна привилегия SeLockMemoryPrivilege . О том как её включить я даже не буду и говорить, потому что с безопасностью разработчики переборщили так что ужас, я бы сказал что почти всё программирование свели на нет. Возможно на каких-то серверных ОС она и включается. Я создавал темы по этим привилегиям как их включать и выключать, и это ребята тёмный лес дальняя дорога.
Далее что касаемо функции HeapCreate. То она даже Гб памяти не может выделить. Она мажет расшириться после до гигабайта если записать так.
Функция HeapReAlloc, всегда меняет указатель, хотя написано что память в новое место не перемещается если есть резерв, т.е. если не вся память исчерпана из HeapCreate.
C++
1
2
3
4
HANDLE HpCreate1=HeapCreate(0,1073741824/2,0);
cout<<"код ошибки "<<GetLastError()<<en;
char*par=(char*)HeapAlloc(HpCreate1,0,1073741824);
cout<<"код ошибки "<<GetLastError()<<en;
Сначала я выделяю полгига. Если вы увеличите память до гига, то функция наверное сменит указатель т.к. даже зарезервировать память нельзя заранее, все данные переносятся автоматически что честно говоря тут не корректно на фоне смены указателя, хотя можно попробовать пересчитать смещения. Функция HeapCreate на больших обёмах со 2ым параметром должна дать 0 чтобы вызвать VirtualAlloc, так написано в инструкции.
Далее оператор new тоже не блещет и на нём куча ограничений.
В принципе где можно использовать Гб в пользовательских ПО не понятно. Но. Всё начинается после него. Зачем же тогда структура MEMORYSTATUSEX, если нельзя опереться на параметр STATUSEX.ullAvailPhys и полноценно выделить память. Также не понятно зачем виртуальная память если ей управлять нельзя. Почему нет нормальных средств для выделения физ. памяти если она есть и критически нужна. А что будет если будет полноценный софт, мощная программка которой нужна память.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
22.12.2022, 10:47
Цитата Сообщение от Nexi99 Посмотреть сообщение
если будет полноценный софт, мощная программка которой нужна память.
Зачем такой мощной программке Windows?

Добавлено через 39 минут
Цитата Сообщение от Nexi99 Посмотреть сообщение
Выделить память можно не более 2Гб.
На одной из моих Windows-машин с 12GB выделяется 32GB.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
 
int main(int c, char* v[])
{
    auto e =VirtualAlloc(0,
        040'00000'00000,
        0 //MEM_LARGE_PAGES
        |MEM_RESERVE
        |MEM_COMMIT,
        PAGE_READWRITE);
    
    if ( 0 == e ) return -1;
 
    return 0;
}


Добавлено через 1 час 27 минут
Цитата Сообщение от Nexi99 Посмотреть сообщение
нужна привилегия SeLockMemoryPrivilege . О том как её включить я даже не буду и говорить
Вопрос для раздела https://www.cyberforum.ru/windows-admin/

https://learn.microsoft.com/ru... y-settings

https://learn.microsoft.com/ru... -in-memory
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
22.12.2022, 19:16  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
На одной из моих Windows-машин с 12GB выделяется 32GB.
у меня не выделяется. Там в инструкции написано что в режиме AWE можно брать только 4гб, при этом нужно заблокировать файл подкачки чтобы память туда не уходила. Я смотрел межпроцессорное взаимодействие так там тоже что-то с привилегиями намудрили. Но вроде если не удалённое взоимодействие а в приделах текущего пользователя, то ничего включать не нужно, вот ссылка https://learn.microsoft.com/ru... red-memory. Мне кажется для моей задачи это дорого.

Добавлено через 24 минуты
По ссылкам есть инструкции как включить некоторые привелегии вручную, возникает вопрос а как это сделать программно?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
23.12.2022, 08:41
Цитата Сообщение от Nexi99 Посмотреть сообщение
есть инструкции как включить некоторые привелегии вручную, возникает вопрос а как это сделать программно?
Чтобы сделать утилитку для администраторов?
Добавление привилегий пользователю

Добавлено через 12 минут
Цитата Сообщение от Nexi99 Посмотреть сообщение
в инструкции написано что в режиме AWE можно брать только 4гб
32-разрядная программа всё: и себя, и библиотеки, и спроецированные файлы, видит через четырёхгигабайтное адресное окошко.

https://learn.microsoft.com/ru... /windows-3
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,837
Записей в блоге: 4
24.12.2022, 08:21  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Чтобы сделать утилитку для администраторов?
Алгоритм ниже позволяет добовлять привелегии? Там есть функции типа LsaAddAccountRights, возникает вопрос действительно ли это работает и к какой уч. записи добавляются привилегии к текущей или создаётся какае-та новая?
Цитата Сообщение от politoto Посмотреть сообщение
32-разрядная программа всё: и себя, и библиотеки, и спроецированные файлы, видит через четырёхгигабайтное адресное окошко.
Это понятно.
Цитата Сообщение от politoto Посмотреть сообщение
На одной из моих Windows-машин с 12GB выделяется 32GB.
Выделяли в режиме AWE? Память выделилась виртуальная или физическая? Открывали привилегию SeLockMemoryPrivilege указанную в инструкции или в вашей ОС в этом нет необходимости?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2022, 08:21
Помогаю со студенческими работами здесь

При пользовании любым приложением в диспетчере задач 3 гб озу, вылазит табличка о недостатке памяти
При использовании любым приложением в диспетчере задач 3 гб озу, вылазит табличка о недостатке памяти и приложение зависает или выключается...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб?
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...

При закрытом диспетчере задач процессор грузится до 60-100%, при открытии диспетчере падает до 10%
При закрытом диспетчере задач процессор грузится до 60-100%, при открытии диспетчере падает до 10%.При закрытом смотрел через HWMonitor,...

Загруженность памяти в диспетчере задач
Здравствуйте, около недели назад решила обновить себе мат. плату с Gigabyte Technology Co., Ltd. H97-D3H-CF на MSI Z97 GAMING 3. Так же я...

Вопросы по отображению данных оперативной памяти в диспетчере задач
Не подскажете что за цифры, мне казалось что доступно должно показывать 8гб поскольку у меня озу 8гб, а тут меньше написано. Либо я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru