Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
1-59143
Zhirnov Maxim
2002-11-03 17:05
2002.11.18
Помогите с созданием компонентов из dfm файла.


1-59207
Stream2k
2002-11-05 16:18
2002.11.18
Есть форма на ней два TRichEdit и кнопка TButton...


6-59316
Legran
2002-09-22 18:01
2002.11.18
Любителям SQL и не только...


1-59163
Grombl
2002-11-08 22:20
2002.11.18
Цвет надписи у Radiobutton и Checkbox как у фона.


14-59338
N A N
2002-10-29 09:01
2002.11.18
Есть ли сертификация по Дельфи?




   Наверх