Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2014, 00:38   #1
Карпотреских
 
Регистрация: 01.03.2014
Сообщений: 6
Стрелка указатели, работа с памятью

Тема: указатели, работа с памятью.
Вопрос: Как по указателям максимально быстро заменять последовательность данных в памяти заранее неизвестного размера?

Вот например, есть у нас процедура, которая должна тупо скопировать кусок размером SIZE из памяти по адресу P2 в память по адресу Р1:
Код:
Procedure Mem_copypast(Var P1,P2:pointer;SIZE:integer);
begin
//и здесь какойто код,типа P1^:=P2^ но с учётом размера
end;
ясно, что за одно действие переписать гигабайт оперативы не получится, нужен цикл.
Вот самое тупое, что можно зделать:
Код:
Procedure Mem_copypast(Var P1,P2:pointer;SIZE:integer);
var IP1,IP2:^integer; i,L:integer;
begin
  IP1:=P1;//вводим два типизированных указателя, чтобы работала функция inc и IP1^:=IP2^ 
  IP2:=P2;
for i:= 0 to SIZE-1 do //и тупо перебираем SIZE-раз
  begin
  IP1^:=IP2^;        //присвоение
  inc(IP1);inc(IP2); //смещение указателя
  end;
end;
Вот только вариантов реализации может быть множество. хотелось бы увидеть некоторые из них, особенно самые низкоуровневые.
Карпотреских вне форума Ответить с цитированием
Старый 04.03.2014, 00:48   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Move .
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.03.2014, 01:21   #3
Карпотреских
 
Регистрация: 01.03.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Move .
Название процедуры по-асмовски шикарное 8)
На первый взгляд, в ней весьма хитрожопый код. Ну хорошо, буду ковырять.
Хотелось бы увидеть ещё и какую-нибудь эксклюзивную отсебятину, с обоснованием почему именно так, а не иначе 8)
Карпотреских вне форума Ответить с цитированием
Старый 04.03.2014, 02:04   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
ясно, что за одно действие переписать гигабайт оперативы не получится
А нужно? Есть ли реальная задача, которая потребовала бы перемещение таких объемов памяти с одного места на другое?
northener вне форума Ответить с цитированием
Старый 04.03.2014, 06:29   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Что вы подразумеваете под словом заменить? Я увидел перемещение путем смены указателей. То есть если имеется массив данных А с указателем В, то Вы просто сменили указатель на С. Но полная операция выглядит так (наверно) - имеется:
массив А с указателем В
массив C с указателем D
Нужно перенести данные из А в С. При этом А так понимаю никуда не делся (а например, может надо по нескольким массивам распихать). Вот это есть полная задача, а не хитрозадость с указателями.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 04.03.2014, 11:42   #6
Карпотреских
 
Регистрация: 01.03.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Что вы подразумеваете под словом заменить? Я увидел перемещение путем смены указателей.
В идеале так и нужно делать, но в данном случае речь идет не о смене указателей на данные, а о смене данных по указателям.

Цитата:
Сообщение от northener Посмотреть сообщение
А нужно?
нужно 8)

Последний раз редактировалось Карпотреских; 04.03.2014 в 11:55.
Карпотреских вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с памятью в С++ Пaвeл Общие вопросы C/C++ 24 14.10.2013 09:31
Работа с динамической памятью через указатели. Загадочная ошибка. Hqw33 Общие вопросы C/C++ 2 28.03.2012 18:42
Работа с памятью getUp Общие вопросы C/C++ 6 19.01.2010 01:11
С# работа с памятью Anton07 Помощь студентам 0 13.12.2009 23:06
Работа с памятью Shurik Hacker Общие вопросы Delphi 7 22.06.2007 20:51