php中 怎样表示字符串,PHP中字符串的内部表示

我正在

PHP 5.2.10上编写一个简单的网站解析器.

使用默认内部编码(ISO-8859-1)时,我总是在同一个函数调用中得到一个错误:

$start = mb_strpos($index, '');

Fatal error: Allowed memory size of 50331648 bytes exhausted (tried to allocate 11924760 bytes)

在这种情况下,字符串$index的长度为2981190字节 – 恰好是PHP尝试分配的4倍.

现在,如果我使用

mb_internal_encoding('UTF-8')

错误消失了.这是否意味着PHP为多字节字符串使用更多内存用于单字节字符串?怎么可能?有任何想法吗?

UPD:内存使用似乎不依赖于编码:使用UTF-8和ISO-8859-1,平均memory_get_usage()几乎相同.我认为问题可能在于mb_strpos.

实际上,字符串$index具有Windows-1251编码(西里尔文),因此它包含对UTF-8无效的符号.这可能导致mb_strpos以某种方式尝试转换或仅使用额外的内存来满足某些需求.

将尝试在mb_strpos的源代码中找到答案.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值