The construct you are using creates a copy of the V8::String into a char*
bupper allocated for the String::AsciiValue object. This is the only way to
get a V8::String sitting in the V8 heap as a C string. This is both due to
GC issues and due to the internal representation of strings in V8 where a
string object is not necessarily a sequential ASCII buffer.

However it might be possible for you to use external strings, but of cause
that depends on the use-case. External strings are strings which have their
actual string buffer outside the V8 heap, and when you have an external
string it is possible get pointer to that string buffer without copying the
string data. External strings can be created either when creating a string
through the API using v8::String::NewExternal, or an external string can
replace a normal string using v8::String::MakeExternal. If your strings are
created from outside V8 in the first place consider v8::String::NewExternal,
and if you are converting the same strings to c strings again and again
consider v8::String::MakeExternal.

Regards,
Søren

On Tue, Dec 8, 2009 at 08:26, Ray Morgan <[email protected]> wrote:

> Hey,
>
> I am currently writing a Protocol Buffers library for Node.js.
> Basically I am going to generate a thin v8 wrapper around the protobuf
> generated C++ code. The main issue that I am coming up against is how
> to convert a v8::String to a c string in an efficient way. Right now I
> am doing:
>
> String::AsciiValue data(args[0]->ToString());
> ParseFromString(*data, data.length());
>
> This works, but seems to be the main bottleneck that I am running up
> against. Is there any more efficient way to go from v8::String ->
> const char* or std::string?
>
> Thanks.
>
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
>

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to