LINUX.ORG.RU
решено  
hibou

Копирование перекрывающихся участков памяти


0

1

Сейчас с коллегой дискутировали о реализации копирования перекрывающихся областей памяти. Ес-но нужно сделать как быстрее и более безглючно.

Участки перекрываются так:

 1.      |----------|
 2. |----------|
Нужно перенести данные из 1 в 2. Стандартными функциями пользоваться в принципе можно, но это слишком большая надежда, что она всегда будет копировать от начала к концу, а не наоборот.

Я предложил обычный цикл for, тупо скопировать из 1 в 2 побайтно. Коллега говорит, что лучше вычислить кусок до перекрытия, скопировать его стандартной функцией, потом докопировать остальное опять же стандартной функцией. Типа говорит, что так будет быстрее несмотря на усложнение алгоритма.

Действие происходит в ядре Linux. Куски памяти могут быть до 15 Мб.

Как считаете, как будет быстрее? Есть ли еще какой-то путь? Заранее спасибо за участие.


[#]  
x0r
>>-----Цитата---->>

так будет быстрее

<<-----Цитата----<<

имхо все "стандартные" функции копирования фигачат for()

** ()
[#] Ответ на: комментарий от Jetty 22.12.2011 17:04:26  
Waterlaz
>>-----Цитата---->>

Кстати в ядре это реализуется ассемблером а не вызовом из string.c

<<-----Цитата----<<

О каком string.c идет речь? Понятно же, что ядро не юзает функции из libc.

** ()
[#]  

Практически всегда можно написать более быстрый аналог стандартной функции, другой вопрос надо ли. Нужно смотреть конкретную реализацию, чтобы понять насколько она отстойна.

** ()
[#] Ответ на: комментарий от Waterlaz 21.12.2011 21:34:05  
shty
>>-----Цитата---->>

Какой нах третий участок? Ты чем ударился?

<<-----Цитата----<<

ну как, у него открылся третий участок, и, когда он это заметил, то упал на пол и больно ударился пятым участком

*** ()
[#] Ответ на: комментарий от Harald 22.12.2011 0:19:36  
shty
>>-----Цитата---->>

инженеры Intel дооптимизировались до того, что обычный mov в цикле, выдаваемый компиляторами, работает быстрее )

<<-----Цитата----<<

а вот баллонов на инженеров интел не надо

*** ()