[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: zero-copy read() into Lua string?
- From: Josh Haberman <jhaberman@...>
- Date: Mon, 10 Jan 2011 03:06:41 +0000 (UTC)
There doesn't seem to be a way to construct a Lua string by writing
directly into Lua's internal buffer. For example, read_chars() in
iolib uses the luaL_Buffer abstraction which uses an intermediate
buffer.
Is there any reason Lua couldn't support a function like:
/* Pushes a string of length "len" whose contents are uninitialized.
* The caller must initialize the string by writing to the returned
* buffer and call lua_finalizewstring() before calling any other Lua
* function on "L"; after this call, the client may no longer write
* into the returned buffer. */
char *lua_pushwstring(lua_State *L, size_t len);
void lua_finalizewstring(lua_State *L);
(lua_finalizewstring() is there in case Lua wants to internally
precompute a hash of the string or anything like that.)
In some cases (like read()/fread()) this could save a memory copy for
string data that is flowing from C->Lua, which seems like a big
benefit. Though I haven't implemented this idea to perform benchmarks,
avoiding memory copies can improve efficiency significantly in my
experience.
Josh