|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Оперативная память
В общем я в этом совсем не шарю, кому не трудно, объясните.
Как я понимаю, когда мы создаем переменные через var и через New/Dispose мы занимаем кэш (или нет? если нет, то что мы занимаем?) А как можно что-то записать в оперативную память, а потом оттуда считать? |
#2
|
||||
|
||||
справку по New смотрели?
Код:
type PListEntry = ^TListEntry; TListEntry = record Next: PListEntry; Text: string; Count: Integer; end; var List, P: PListEntry; begin ... New(P); P^.Next := List; P^.Text := 'Hello world'; P^.Count := 1; List := P; ... end; Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 09.09.2010 в 15:17. |
#3
|
||||
|
||||
Код:
type Tr = ^r; r = record i: Integer; b: Byte; w: Word; d: DWORD; a: array [0..$ff] of Byte; end; var p: Tr; i: Integer; b: Byte; w: Word; d: DWORD; a: array [0..$ff] of Byte; begin Edit1.Text:='SizeOf(p)='+IntToStr(SizeOf(p))+' SizeOf(p^)='+IntToStr(SizeOf(p^)); New(p); p^.i:=1; p^.b:=2; p^.w:=3; p^.d:=4; p^.a[0]:=5; p^.a[1]:=6; i:=p^.i; b:=p^.b; w:=p^.w; d:=p^.d; Dispose(p); end; Пишу программы за еду. __________________ |
#4
|
||||
|
||||
не, вы помоему не поняли, как работать с типами, указателями, адресами и фунциями выделения/освобождения памяти (new/dispose) я прекрасно знаю)
я не понимаю, как работать с оперативной паматью, а не с тем, что я сейчас перечислил (если это не одно и тоже) |
#5
|
||||
|
||||
Каждому процессу отводиться определенное количество памяти (все это дело загрузчик читает из заголовка EXE). Для выделения дополнительной памяти используются функции MemAlloc, для освобождения MemFree (более детально - в MSDN).
При помощи функции Addr можно получить адрес и писать/читать информацию. Лично для меня чтение из памяти ( и запись в нее) гораздо проще делать при помощи ассемблера, хотя можно обойтись и штатными средствами Дельфи - через указатели. Что касается переменных - те что объявлены через var все "живут" в стеке, когда остальные "живут" в "куче" (heap). И к тем и к другим доступ всегда есть. Что касается кэша - туда руками лазить запрещено да и невозможно в принципе. (Да и зачем?) Хорошо написанная программа не требует документации ICQ 9-184-668. |
#6
|
||||
|
||||
спасибо, понял
|