小编use*_*685的帖子

为什么 Microsoft 的 std::string 实现需要堆栈上的 40 个字节?

最近看了这个关于 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)

c++ string

5
推荐指数
1
解决办法
1419
查看次数

标签 统计

c++ ×1

string ×1