sizeof std::string is 4, this is to say it has only a member variable i.e, a pointer to content buffer.
}:cat tt.C
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void foo(std::string &str)
{
//printf("%s/n",NULL); // To generate a core file
int * p = (int *)&str;
printf("sizeof(std::string) is %d/n",sizeof(str));
printf("*(p+0)=0x%x/n",(*p));
printf("*(*(p+0))='%s'/n",(char *)((*(p+0))));
//printf("*(p+1)=0x%x/n",(*(p+1)));
//printf("*(*(p+1))=%s/n",(char *)((*(p+1))));
}
int main()
{
std::string ss("12345");
foo(ss);
return 0;
}
It will get following output:
}:./a.out
sizeof(std::string) is 4
*(p+0)=0x40e10
*(*(p+0))='12345'
探究std::string大小及内存布局
本文通过一个简单的C++程序演示了std::string的实际大小为4字节,并揭示了其内部仅包含一个指向内容缓冲区的指针。通过打印std::string变量的地址及其所指向的内容,深入探讨了std::string的内存布局。
171

被折叠的 条评论
为什么被折叠?



