Commit 10ed79f7 authored by Bi Xue's avatar Bi Xue Committed by Facebook Github Bot 5

Suggestion of fixing folly::to<std::string>(double/float) performance issue

Summary:
When calling folly::to<SomeString>(double), generic implementation will
firstly reserve 24 (or 25 when negative value) bytes. This will introduce
a malloc call for most of mainstream string implementation.

But for most cases, a floating point doesn't need 24 (or 25) bytes to
be converted as a string.

This diff try to introduce a special version which does not do string reserve.

Reviewed By: ericniebler

Differential Revision: D3728171

fbshipit-source-id: d70ead396ad6c8d0df1f542c5516f7534e82cb97
parent 3c2fad7c
......@@ -928,6 +928,27 @@ to(const Ts&... vs) {
return result;
}
/**
* Special version of to<SomeString> for floating point. When calling
* folly::to<SomeString>(double), generic implementation above will
* firstly reserve 24 (or 25 when negative value) bytes. This will
* introduce a malloc call for most mainstream string implementations.
*
* But for most cases, a floating point doesn't need 24 (or 25) bytes to
* be converted as a string.
*
* This special version will not do string reserve.
*/
template <class Tgt, class Src>
typename std::enable_if<
IsSomeString<Tgt>::value && std::is_floating_point<Src>::value,
Tgt>::type
to(Src value) {
Tgt result;
toAppend(value, &result);
return result;
}
/**
* toDelim<SomeString>(SomeString str) returns itself.
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment