Bug 10402 – memmove optimization for std.algorithm.copy

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-06-18T05:24:34Z
Last change time
2024-12-01T16:17:58Z
Assigned to
No Owner
Creator
Tommi
Moved to GitHub: phobos#9984 →

Comments

Comment #0 by tommitissari — 2013-06-18T05:24:34Z
Add an optimization for: Range2 copy(Range1, Range2)(Range1 source, Range2 target); ...to use the c function memmove when it is safe to do so and the two ranges overlap each other (when they don't overlap, a vectorized copy should be faster). As far as I can tell, it is safe to use memmove for copying source over target if all of the following are true: 1) Both ranges are arrays (static or dynamic) 2) Both arrays have the same element type 3) hasElaborateAssign!T is false for the element type T I haven't benchmarked anything, but all the good C++ standard library implementations of std::copy seem to do this optimization, and I trust that they know what they are doing.
Comment #1 by tommitissari — 2013-06-18T06:03:11Z
(In reply to comment #0) > Add an optimization for: > > Range2 copy(Range1, Range2)(Range1 source, Range2 target); > > ...to use the c function memmove when it is safe to do so and the two ranges > overlap each other (when they don't overlap, a vectorized copy should be > faster). As far as I can tell, it is safe to use memmove for copying source > over target if all of the following are true: > > 1) Both ranges are arrays (static or dynamic) > 2) Both arrays have the same element type > 3) hasElaborateAssign!T is false for the element type T > > I haven't benchmarked anything, but all the good C++ standard library > implementations of std::copy seem to do this optimization, and I trust that > they know what they are doing. Also, the documentation for std.algorithm.copy should be changed to indicate that the ranges are allowed to overlap if the above conditions hold.
Comment #2 by robert.schadek — 2024-12-01T16:17:58Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9984 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB