diff --git a/benchmark/static_reflect/citm_catalog_benchmark/benchmark_serialization_citm_catalog.cpp b/benchmark/static_reflect/citm_catalog_benchmark/benchmark_serialization_citm_catalog.cpp index 1570c27b6..16b88d894 100644 --- a/benchmark/static_reflect/citm_catalog_benchmark/benchmark_serialization_citm_catalog.cpp +++ b/benchmark/static_reflect/citm_catalog_benchmark/benchmark_serialization_citm_catalog.cpp @@ -40,16 +40,13 @@ void bench_reflect_cpp(CitmCatalog &data) { void bench_rust(serde_benchmark::CitmCatalog *data) { serde_benchmark::set_citm_data(data); - char * output = serde_benchmark::serialize_citm_to_string(); - size_t output_volume = strlen(output); + size_t output_volume = serde_benchmark::serialize_citm_to_string(); printf("# output volume: %zu bytes\n", output_volume); - serde_benchmark::free_str(output); volatile size_t measured_volume = 0; pretty_print(1, output_volume, "bench_rust", bench([&measured_volume, &output_volume]() { - char * output = serde_benchmark::serialize_citm_to_string(); - serde_benchmark::free_str(output); + measured_volume = serde_benchmark::serialize_citm_to_string(); })); } #endif // SIMDJSON_RUST_VERSION diff --git a/benchmark/static_reflect/serde-benchmark/lib.rs b/benchmark/static_reflect/serde-benchmark/lib.rs index 969e6d3ed..4a3fe55f6 100644 --- a/benchmark/static_reflect/serde-benchmark/lib.rs +++ b/benchmark/static_reflect/serde-benchmark/lib.rs @@ -38,7 +38,6 @@ pub struct Status { pub struct TwitterData { statuses: Vec, } - static mut TWITTER_DATA: *mut TwitterData = std::ptr::null_mut(); #[no_mangle] @@ -56,13 +55,12 @@ pub unsafe extern "C" fn set_twitter_data(raw: *mut TwitterData) { } #[no_mangle] -pub unsafe extern "C" fn serialize_twitter_to_string() -> *const c_char { +pub unsafe extern "C" fn serialize_twitter_to_string() -> usize { if TWITTER_DATA.is_null() { - return std::ptr::null(); + return 0; } let data = &*TWITTER_DATA; - let serialized = serde_json::to_string(data).unwrap(); - std::ffi::CString::new(serialized).unwrap().into_raw() as *const c_char + serde_json::to_string(data).unwrap().len() } #[no_mangle] @@ -214,13 +212,12 @@ pub unsafe extern "C" fn set_citm_data(raw: *mut CitmCatalog) { } #[no_mangle] -pub unsafe extern "C" fn serialize_citm_to_string() -> *mut c_char { +pub unsafe extern "C" fn serialize_citm_to_string() -> usize { if CITM_DATA.is_null() { - return std::ptr::null_mut(); + return 0; } let data = &*CITM_DATA; - let serialized = serde_json::to_string(data).unwrap(); - std::ffi::CString::new(serialized).unwrap().into_raw() + return serde_json::to_string(data).unwrap().len(); } /// Frees the CitmCatalog pointer. diff --git a/benchmark/static_reflect/serde-benchmark/serde_benchmark.h b/benchmark/static_reflect/serde-benchmark/serde_benchmark.h index c121c86e5..3dded524f 100644 --- a/benchmark/static_reflect/serde-benchmark/serde_benchmark.h +++ b/benchmark/static_reflect/serde-benchmark/serde_benchmark.h @@ -36,7 +36,7 @@ TwitterData *twitter_from_str(const char *raw_input, size_t raw_input_length); void set_twitter_data(TwitterData *raw); -const char *serialize_twitter_to_string(); +size_t serialize_twitter_to_string(); void free_twitter(TwitterData *raw); @@ -47,7 +47,7 @@ CitmCatalog *citm_from_str(const char *raw_input, uintptr_t raw_input_length); void set_citm_data(CitmCatalog *raw); -char *serialize_citm_to_string(); +size_t serialize_citm_to_string(); /// Frees the CitmCatalog pointer. void free_citm(CitmCatalog *raw_catalog); diff --git a/benchmark/static_reflect/twitter_benchmark/benchmark_serialization_twitter.cpp b/benchmark/static_reflect/twitter_benchmark/benchmark_serialization_twitter.cpp index 87685c8bd..98e8c6c6d 100644 --- a/benchmark/static_reflect/twitter_benchmark/benchmark_serialization_twitter.cpp +++ b/benchmark/static_reflect/twitter_benchmark/benchmark_serialization_twitter.cpp @@ -40,16 +40,13 @@ void bench_reflect_cpp(TwitterData &data) { void bench_rust(serde_benchmark::TwitterData *data) { serde_benchmark::set_twitter_data(data); - const char * output = serde_benchmark::serialize_twitter_to_string(); - size_t output_volume = strlen(output); + size_t output_volume = serde_benchmark::serialize_twitter_to_string(); printf("# output volume: %zu bytes\n", output_volume); - serde_benchmark::free_string(output); volatile size_t measured_volume = 0; pretty_print(1, output_volume, "bench_rust", bench([&measured_volume, &output_volume]() { - const char * output = serde_benchmark::serialize_twitter_to_string(); - serde_benchmark::free_string(output); + measured_volume = serde_benchmark::serialize_twitter_to_string(); })); } #endif