Форум: "Система";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];
ВнизРабота с памятью. Найти похожие ветки
← →
Viktor Kushnir (2002-09-16 08:50) [0]Подкиньте люди мне функцию типа copymemory,
но чтобы могла она копировать со смещением, т.е. не с начала указателя, а с указателя+10(байт) например.
И еще такую что бы также записовала не сначала а тоже со смещением.
Или хотя бы расскажите про то как винда в памяти разные переменные хранит.
String, Array[x..y] of.., Array of, Record, Set of...
ну в общем кто что знает.
← →
Opuhshii (2002-09-16 09:34) [1]:-/ ,.. мда,..
а как Вы это себе представляете,.
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:36) [2]%))
:-/ ,.. мда,..
а как Вы это себе представляете,.
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,...
"как винда в памяти разные переменные хранит" - %))))))
← →
Polevi (2002-09-16 10:00) [3]ну например так
MoveMemory(Pointer(DWORD(FBuffer)+sizeof(DWORD)),FBuffer,FSize);
← →
Anatoly Podgoretsky (2002-09-16 10:05) [4]А обычный MOVE что в отставку?
← →
Space Rover (2002-09-16 10:13) [5]Я обычно делаю так:
- для получения байта
Move(Pointer(Longint(FBuffer) + Pos)^, Bytes_Get, 1);
- для записи байта
Move(Bytes_Put, Pointer(Longint(FBuffer) + Pos)^, 1);
очень легко переделать на получение и запись данных любого размера.
А вообще смотри как устроен класс TStream и его потомки.
← →
Serg Gurin (2002-09-19 01:08) [6]
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 - какое количество элементов сдвинуть
← →
Viktor Kushnir (2002-09-19 06:57) [7]Всем спасибо! Все действительно так как здесь написано.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c