面试题答案
一键面试字符串长度获取
- C字符串:获取长度需遍历整个字符串,直到遇到空字符
'\0'
,时间复杂度为O(n)。 - SDS:在结构中直接记录长度,获取长度时间复杂度为O(1)。
内存分配
- C字符串:每次修改字符串(如拼接)都可能需要重新分配内存,频繁的内存分配和释放容易产生内存碎片,影响性能。
- SDS:
- 采用预分配策略,当空间不够时,分配比实际所需更大的空间,减少频繁内存分配。
- 惰性释放策略,当缩短字符串时,不会立即释放多余内存,而是记录下来供后续使用,减少内存释放开销。
缓冲区溢出
- C字符串:操作字符串时,如拼接,若未正确分配足够空间,容易造成缓冲区溢出,导致程序崩溃或安全问题。
- SDS:由于有长度记录和预分配机制,操作时会检查空间是否足够,避免缓冲区溢出。