最近看了这个关于 facebook 实现字符串的视频,我很想看看微软实现的内部结构。不幸的是,字符串文件 (in %VisualStudioDirectory%/VC/include) 似乎不包含实际定义,而仅包含转换函数(例如 atoi)和一些运算符重载。
我决定从用户级程序中对它进行一些探索和刺激。当然,我做的第一件事是测试sizeof(std::string). 令我惊讶的是, std::string 需要 40 个字节!(无论如何在 64 位机器上。)前面提到的视频详细介绍了 facebook 的实现如何只需要 24 个字节而 gcc 的实现需要 32 个字节,所以这至少可以说是令人震惊的。
我们可以通过编写一个简单的程序来深入挖掘,该程序逐字节打印数据的内容(包括 c_str 地址),如下所示:
#include <iostream>
#include <string>
int main()
{
std::string test = "this is a very, very, very long string";
// Print contents of std::string test.
char* data = reinterpret_cast<char*>(&test);
for (size_t wordNum = 0; wordNum < sizeof(std::string); wordNum = wordNum + sizeof(uint64_t))
{
for (size_t i = 0; …Run Code Online (Sandbox Code Playgroud)