当我在查看gcc中std :: string的实现方式时,我注意到sizeof(std :: string)恰好等于指针的大小(在x32构建中为4个字节,在x64中为8个字节)。由于字符串应至少包含指向字符串缓冲区和其长度的指针,这使我认为GCC中的std :: string对象实际上是指向某个内部结构的指针,该结构保存此数据。
因此,即使字符串为空,创建新字符串也应进行一次动态内存分配。
除了性能开销外,这还会导致内存开销(当我们分配非常小的内存块时发生)。
因此,我只看到了这种设计的劣势。我错过了什么?有哪些优点,以及首先采用这种实现方式的原因是什么?
因此,即使字符串为空,创建新字符串也应进行一次动态内存分配。
除了性能开销外,这还会导致内存开销(当我们分配非常小的内存块时发生)。
因此,我只看到了这种设计的劣势。我错过了什么?有哪些优点,以及首先采用这种实现方式的原因是什么?