Issue #905 has been updated by mame (Yusuke Endoh).


headius (Charles Nutter) wrote:
> mame: I do not understand how there's any way Linux would be different from any other platform. If there's no room in contiguous memory to expand a pointer, the data must be moved elsewhere in memory. Am I missing something?


Almost all recent practical operating systems are using the virtual memory mechanism.

http://en.wikipedia.org/wiki/Virtual_memory

In the OS based on the mechanism, there is a mapping from virtual memory addresses to physical ones.
By changing the map, contiguous virtual memory addresses can be (re)assigned without moving physical memory data.
(This is why the system call in question is named "remap", I think)

-- 
Yusuke Endoh <mame / tsg.ne.jp>
----------------------------------------
Feature #905: Add String.new(fixnum) to preallocate large buffer
https://bugs.ruby-lang.org/issues/905#change-31790

Author: headius (Charles Nutter)
Status: Feedback
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: 
Target version: next minor


=begin
 Because Strings are used in ruby as arbitrary byte buffers, and because the cost of growing a String increases as it gets larger (especially when it starts small), String.new should support a form that takes a fixnum and ensures the backing store will have at least that much room. This is analogous to Array.new(fixnum) which does the same thing.
 
 The simple implementation of this would just add a Fixnum check to the String.new method, and the result would be an empty string with that size buffer. This would allow heavy string-appending algorithms and libraries (like ERb) to avoid doing so many memory copies while they run.
=end



-- 
http://bugs.ruby-lang.org/