![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с памятью.
Viktor Kushnir © (2002-09-16 08:50:00)Подкиньте люди мне функцию типа copymemory,
но чтобы могла она копировать со смещением, т.е. не с начала указателя, а с указателя+10(байт) например.
И еще такую что бы также записовала не сначала а тоже со смещением.
Или хотя бы расскажите про то как винда в памяти разные переменные хранит.
String, Array[x..y] of.., Array of, Record, Set of...
ну в общем кто что знает.
Viktor Kushnir (2002-09-19 06:57:00) [1]Всем спасибо! Все действительно так как здесь написано.
Serg Gurin (2002-09-19 01:08:00) [2]
Move(Pointer(Longint(@Var1) + Pos1 * ElementSize)^, Pointer(Longint(@Var2) + Pos2 * ElementSize)^, N * ElementSize)
Var1 и Var2 - это переменные (не указатели)
если с указателями, то
Move(Pointer(Longint(Var1) + Pos1 * ElementSize)^, Pointer(Longint(Var2) + Pos2 * ElementSize)^, N * ElementSize)
если это массивы типа array of type, то
Move(Var1[Pos1], Var2[Pos2], N * ElementSize)
где ElementSize - размер элемента в байтах, обычно определяется функцией SizeOf(Type), где Type - тип элемента
Pos1 - с какой позиции сдвинуть
Pos2 - на какую позицию сдвинуть
N - какое количество элементов сдвинуть
Space Rover (2002-09-16 10:13:00) [3]Я обычно делаю так:
- для получения байта
Move(Pointer(Longint(FBuffer) + Pos)^, Bytes_Get, 1);
- для записи байта
Move(Bytes_Put, Pointer(Longint(FBuffer) + Pos)^, 1);
очень легко переделать на получение и запись данных любого размера.
А вообще смотри как устроен класс TStream и его потомки.
Anatoly Podgoretsky (2002-09-16 10:05:00) [4]А обычный MOVE что в отставку?
Polevi (2002-09-16 10:00:00) [5]ну например так
MoveMemory(Pointer(DWORD(FBuffer)+sizeof(DWORD)),FBuffer,FSize);
Opuhshii (2002-09-16 09:36:00) [6]%))
:-/ ,.. мда,..
а как Вы это себе представляете,.
CopyFromOffset1,CopyFromOffset2, CopyFromOffset3...CopyFromOffsetN.
Array Of Integer,..
-4 0 1 2 3 4 5 6 7
[Длинна][$EF FF FF FF][$EF FF FF FF][#00]
часный случай Array Of, - String последовательность char,
-8 -4 0 1 2 3 4 5 6 7.....
[Счетчик ссылок][Длинна][ ][H][E][L][L][O][,][#32][W][O][R][L][D][#00]
часный случай ShortString
0 1 2 3 4 5 6 7.....
[Длинна][H][E][L][L][O][,][#32][W][O][R][L][D][#00]
читaй Object Pascal Reference,...
"как винда в памяти разные переменные хранит" - %))))))
Opuhshii (2002-09-16 09:34:00) [7]:-/ ,.. мда,..
а как Вы это себе представляете,.
CopyFromOffset1,CopyFromOffset2, CopyFromOffset3...CopyFromOffsetN.
Array Of Integer,..
-4 0 1 2 3 4 5 6 7
[Длинна][$EF FF FF FF][$EF FF FF FF][#00]
часный случай Array Of, - String последовательность char,
-8 -4 0 1 2 3 4 5 6 7.....
[Счетчик ссылок][Длинна][ ][H][E][L][L][O][,][#32][W][O][R][L][D][#00]
часный случай ShortString
0 1 2 3 4 5 6 7.....
[Длинна][H][E][L][L][O][,][#32][W][O][R][L][D][#00]
читaй Object Pascal Reference,...
"как винда в памяти разные переменные хранит" - %))))))