gpt4 book ai didi

string - 为什么 PHP 不对字符串使用内部智能字符串?

转载 作者:行者123 更新时间:2023-12-04 18:37:18 25 4
gpt4 key购买 nike

PHP 有一个称为智能字符串 (smart_str?) 的内部数据结构,它们存储长度和缓冲区大小。也就是说,分配比字符串长度更多的内存以提高连接性能。为什么这个数据结构不用于实际的 PHP 字符串?这不会导致更少的内存分配和更好的性能吗?

最佳答案

正常的 PHP 字符串(从 PHP 7 开始)由 zend_string 表示。类型,其中包括字符串的长度及其字符数据数组。 zend_string通常分配 s 以精确适应字符数据(尽管对齐):它们不会留下附加字符的地方。
smart_str结构包含一个指向 zend_string 的指针和分配大小。这一次,zend_string不会被精确分配。相反,分配将变得太大,因此可以附加额外的字符而无需昂贵的重新分配。
smart_str的重新分配政策如下: 首先,它会被分配为总大小为 256 字节(减去 zend_string 头,减去分配器开销)。如果超过此大小,它将被重新分配为 4096 字节(减去开销)。之后,大小将以 4096 字节为增量增加。

现在,假设我们用 smart_str 替换所有字符串ings。这意味着即使是单个字符串也会有 256 字节的最小分配大小。鉴于使用的大多数字符串都很小,这是 Not Acceptable 开销。

所以本质上,这是一个经典的性能/内存权衡。我们默认使用内存紧凑表示,并在从中受益最多的情况下切换到更快但内存效率较低的表示,即大字符串由小部分构造的情况。

关于string - 为什么 PHP 不对字符串使用内部智能字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com