![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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). И к тем и к другим доступ всегда есть. Что касается кэша - туда руками лазить запрещено да и невозможно в принципе. (Да и зачем?) |
|
#6
|
||||
|
||||
|
спасибо, понял
|