mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-15 03:27:49 +01:00
64c6ef2de7
This implements two optimizations on fs::Path, which N added in 12.0.0. The current structure looks like: ```cpp struct Path { const char *m_str; // Points to the read-only path string char *m_write_buffer_buffer; // Part of std::unique_ptr<char[], ams::fs::impl::Deleter> ams::fs::impl::Deleter m_write_buffer_deleter; // Parse of std::unique_ptr<char[], ams::fs::impl::Deleter>, stores the size of the buffer. size_t m_write_buffer_length; // Copy of the write buffer's size accessible to the Path() structure. bool m_is_normalized; // Whether the path buffer is normalized }; ``` This is pretty wasteful. The write buffer size is stored twice, wasting 8 bytes, because one copy of the size isn't accessible to the path. In addition, due to alignment, the bool wastes 7 padding bytes. This commit: * Encodes normalized in the low bit of the write buffer length, saving 8 bytes. * Use a custom WriteBuffer class rather than generic unique_ptr, to avoid needing to store the WriteBuffer twice. These each save 8 bytes, for a final size of 0x18 rather than 0x28. |
||
---|---|---|
.. | ||
stratosphere | ||
stratosphere.hpp |