Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.18;
Скачать: CL | DM;

Вниз

Работа с памятью.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
1-59129
appp
2002-11-08 13:10
2002.11.18
ListView


1-59113
_acme
2002-11-08 07:26
2002.11.18
Как можно на форме разместить текстуру. (На подобии Opera 6)


14-59367
KSergey
2002-10-29 14:24
2002.11.18
Как запретить остановку в исходниках компонент


14-59389
Николай Быков
2002-10-30 11:40
2002.11.18
Команда кодеров :-)


4-59491
KidMan
2002-10-03 22:27
2002.11.18
onMouseOver над объектом Восстановить старое свойство caption