Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/100: Рейтинг темы: голосов - 100, средняя оценка - 4.77
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315

Работа с памятью

26.09.2010, 12:25. Показов 19335. Ответов 57

Студворк — интернет-сервис помощи студентам
Как можно "выделить" и освободить память?
нужно 2-мя способами: с помощью Си шарпа и с помощью апи функций, помогите плз
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2010, 12:25
Ответы с готовыми решениями:

Работа с памятью
Добрый день всем. Я только начал изучение C#(раньше работал c: C++ маленько - т.е. общее представление о нем имею) и у меня вопрос, можно...

Работа с памятью
Есть приложение, которое запускает другое приложение. Нужно чтобы приложение 1 получило от приложения 2 какие-то данные (1 раз). Ни какой...

Работа с памятью
Всем добрый день. У меня появился такой вопрос: Предположим, есть такой код: AnotherObj GetAO() { SomethingObj A = new...

57
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.09.2010, 17:23
Студворк — интернет-сервис помощи студентам
MSDN. Вряд-ли на русском что-то найдете.
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
26.09.2010, 17:24  [ТС]
буду пробывать переводить так)
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.09.2010, 17:26
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Этот метод получается типа апи функциями да?
GlobalMemoryStatusEx - это API функция.
Цитата Сообщение от 23Alex24 Посмотреть сообщение
а как посмотреть память встроенными вещами C# ?
С помощью WMI.
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
26.09.2010, 17:27  [ТС]
А че это такое?)
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.09.2010, 17:38
WMI - Windows Management Instrumentation. Вот примерный перевод MEMORYSTATUSEX:
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
[StructLayout(LayoutKind.Sequential)]
public class MEMORYSTATUSEX
{
    public uint dwLength; // Размер структуры в байтах.
 
    public uint dwMemoryLoad; // % используемой памяти.
 
    public ulong ullTotalPhys; // Всего физической памяти.
 
    public ulong ullAvailPhys; // Доступно физической памяти.
 
    public ulong ullTotalPageFile; // Точно не знаю. The current committed memory limit for the system or the current process, whichever is smaller, in bytes.
 
    public ulong ullAvailPageFile; // Максиальное кол-во памяти которое может передать (использовать) процесс.
 
    public ulong ullTotalVirtual; // Общий размер виртуального адресного пространства процесса.
 
    public ulong ullAvailVirtual; // Общее количество доступной виртуальной памяти.
 
    public ulong ullAvailExtendedVirtual; // Зарезервировано. Постоянно 0.
 
    public MEMORYSTATUSEX()
    {
        this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
    }
}
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
26.09.2010, 17:39  [ТС]
спасибо, попозже попробую, и если можно примерчик как выделить какую то память и как ее потом освободить
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.09.2010, 17:41
Цитата Сообщение от 23Alex24 Посмотреть сообщение
и если можно примерчик как выделить какую то память и как ее потом освободить
2й пост в теме.
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
26.09.2010, 20:58  [ТС]
ок,как все сделаю положу законченный вариант)

Добавлено через 3 часа 15 минут
А как использовать VirtualAlloc(Ex), VirtualFree(Ex)?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.09.2010, 21:16
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
41
42
43
44
45
[DllImport("kernel32.dll", SetLastError = true)]
static extern UIntPtr VirtualAlloc(IntPtr lpAddress, UIntPtr dwSize,
    AllocationType flAllocationType, MemoryProtection flProtect);
 
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool VirtualFree(UIntPtr lpAddress, UIntPtr dwSize,
    AllocationType dwFreeType);
 
[Flags]
public enum AllocationType : uint
{
    COMMIT = 0x1000,
    RESERVE = 0x2000,
    DECOMMIT = 0x4000,
    RELEASE = 0x8000,
    RESET = 0x80000,
    PHYSICAL = 0x400000,
    TOPDOWN = 0x100000,
    WRITEWATCH = 0x200000,
    LARGEPAGES = 0x20000000
}
 
[Flags]
public enum MemoryProtection : uint
{
    EXECUTE = 0x10,
    EXECUTE_READ = 0x20,
    EXECUTE_READWRITE = 0x40,
    EXECUTE_WRITECOPY = 0x80,
    NOACCESS = 0x01,
    READONLY = 0x02,
    READWRITE = 0x04,
    WRITECOPY = 0x08,
    GUARD_Modifierflag = 0x100,
    NOCACHE_Modifierflag = 0x200,
    WRITECOMBINE_Modifierflag = 0x400
}
...
byte[] buff = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
UIntPtr pBuffLen = (UIntPtr)buff.Length;
UIntPtr pMem = VirtualAlloc(IntPtr.Zero, pBuffLen, AllocationType.COMMIT, MemoryProtection.EXECUTE_READWRITE);
{
 
}
VirtualFree(pMem, (UIntPtr)0, AllocationType.RELEASE);
Marshal.AllocHGlobal и Marshal.FreeHGlobal это аналогия VirtualAlloc и VirtualFree соответственно.
2
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
27.09.2010, 07:35  [ТС]
жуть, Ладно буду мудрить че нить)

Добавлено через 9 часов 50 минут
public ulong ullAvailExtendedVirtual; // Зарезервировано. Постоянно 0. -непонятно что зарезервировано и почему всегда 0 выдает.

И еще, я когда память выделяю никак не изменяются значения памяти, или ее как то надо заполнить чтобы отобразилось?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.09.2010, 08:54
Цитата Сообщение от 23Alex24 Посмотреть сообщение
public ulong ullAvailExtendedVirtual; // Зарезервировано. Постоянно 0
Данный параметр зарезервирован на будущее. Пока что он постоянно 0.
Цитата Сообщение от 23Alex24 Посмотреть сообщение
И еще, я когда память выделяю никак не изменяются значения памяти
Всё изменяется. Второй параметр VirtualAlloc отвечает за размер выделенной памяти в байтах. Если не секрет зачем память выделять?
1
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
27.09.2010, 09:13  [ТС]
Прогу поаккуратней сделал и все увидел) А это лаба такая по архитектуре выч. систем)

Добавлено через 1 минуту
А вот все таки с помощью API выделение и освобождение памяти можно сделать попроще?
Есть пример на дельфе:

<Переменная> := GlobalAllocPtr(GMEM_FIXED, <Размер памяти>);
GlobalFreePtr(<Переменная>);
на шарпе что нить на подобие есть?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.09.2010, 15:49
Я уже написал про Marshal.AllocHGlobal и Marshal.FreeHGlobal.

Добавлено через 14 минут
C#
1
2
3
4
5
IntPtr pMem = Marshal.AllocHGlobal(4096);
{
 
}
Marshal.FreeHGlobal(pMem);
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
27.09.2010, 19:25  [ТС]
Это же не апишные функции, апишными надо еще)
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.09.2010, 19:53
Прикалываешься? GlobalAllocPtr это не WinAPI функция!
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
27.09.2010, 20:00  [ТС]
Ну как ими пользоваться?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.09.2010, 20:18
Вот WinAPI функция GlobalAlloc, GlobalAllocPtr это обёртка над GlobalAlloc:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GlobalAlloc(GlobalAllocFlags uFlags, ulong dwBytes);
 
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GlobalFree(IntPtr hGlobal);
 
[Flags]
enum GlobalAllocFlags : uint
{
    GHND = 0x0042U,
    GMEM_FIXED = 0x0000U,
    GMEM_MOVEABLE = 0x0002U,
    GMEM_ZEROINIT = 0x0040U,
    GPTR = 0x0040U
}
...
IntPtr pMemory = GlobalAlloc(GlobalAllocFlags.GMEM_FIXED, 4096UL);
{
 
}
GlobalFree(pMemory);
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.09.2010, 06:19  [ТС]
Ни че не понятно)
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
28.09.2010, 12:56
так а что тут не понятного? вы знаете что такое функции, что такое параметры функций? что такое атрибуты, енумы с приведенным типом.
Если нет, то тогда надо изучить.

Если же вам не понятна какая-то часть, укажите что именно вам не понятно.
вам дали готовый пример, такой же как и вы привели на синтаксисе делфи
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.09.2010, 17:09  [ТС]
На дельфе там пару строк всего...

1)[DllImport("kernel32.dll", SetLastError = true)] что такое сетласт ерор?
2)static extern IntPtr GlobalAlloc(GlobalAllocFlags uFlags, ulong dwBytes); зачем тут флагс?
3)static extern IntPtr GlobalFree(IntPtr hGlobal); - ш глобал это что? или зачем?
4)[Flags]
enum GlobalAllocFlags : uint
{
GHND = 0x0042U,
GMEM_FIXED = 0x0000U,
GMEM_MOVEABLE = 0x0002U,
GMEM_ZEROINIT = 0x0040U,
GPTR = 0x0040U
}

что означают эти переменные и значения?

5)IntPtr pMemory = GlobalAlloc(GlobalAllocFlags.GMEM_FIXED, 4096UL); здесь 4096UL это что?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2010, 17:09

Работа с памятью
Переместить массив размерностью 16 ячеек из области памяти с начальным адресом 900 в область памяти с начальным адресом А00, изменив...

Работа с памятью
Здравствуйте. Прошу скинуть любые примеры записи/чтения/редактирования данных из/в память. Заранее спасибо. :)

Работа с памятью процесса
Всем привет! Существует чит (трейнер), он изменяет некоторые значения в памяти игры. Я узнал эти адреса, проверяю их и получаю стандартное...

AForge и работа с памятью
Добрых времени суток. При использовании AForge для захвата картинки с вебкамеры память начинает улетать буквально на глазах. За 5 секунд...

Работа напрямую с памятью
Такая проблема: есть структура Struct {int a,int b} еще есть две строки требуется скопировать структуру, а сразу за ней две строки в...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru