Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串数组中奇怪的PHP内存使用_Php - Fatal编程技术网

字符串数组中奇怪的PHP内存使用

字符串数组中奇怪的PHP内存使用,php,Php,使用包,我尝试生成大量UUIDv4 PHP中的字符串是不可变的,这意味着它们不能更改。这也意味着它们可以很容易地共享。在第一种情况下,您有一个包含100k个元素的数组,每个元素引用不同的字符串。在第二种情况下,您有一个包含100k个元素的数组,每个元素引用相同的字符串 作为进一步的参考,请看。有趣-我想知道当数据被复制/统一时,是否有可用的内存优化。如果在静态示例中增加字符串,使每个字符串都是唯一的,那么它会增加内存使用量吗?@ok确实,如果每个字符串都是唯一的,那么内存使用量会增加。@ok确实

使用包,我尝试生成大量UUIDv4


PHP中的字符串是不可变的,这意味着它们不能更改。这也意味着它们可以很容易地共享。在第一种情况下,您有一个包含100k个元素的数组,每个元素引用不同的字符串。在第二种情况下,您有一个包含100k个元素的数组,每个元素引用相同的字符串


作为进一步的参考,请看。

有趣-我想知道当数据被复制/统一时,是否有可用的内存优化。如果在静态示例中增加字符串,使每个字符串都是唯一的,那么它会增加内存使用量吗?@ok确实,如果每个字符串都是唯一的,那么内存使用量会增加。@ok确实值得检查。但奇怪的是,在具有唯一生成值的示例中,保存100k的36字节值需要10MB。我检查了一下,它似乎是线性扩展的,例如,对于100万个值,它占用了约100MB,而对于1000万个值,它占用了1GB—比简单计算所需的容量多出700MB。为什么在发电机可用时将它们保留在内存中?我在想象,因为我的驾驶室不在了,静态示例可以压缩为只存储索引和单个值。作为一个表达,它非常小。至于线性扩展,如果它也保存索引,那么这也会增加一些开销。可能字符串是可变的,但它们使用了一种写时复制机制(如前所述)。是的,在对一个生成随机字符的函数进行了一些实验后,结果证明这只是PHP处理内存的方式。这是令人困惑的,因为对于我测试的数据量,使用的内存与简单的公式(项目数x 36字节)大致一致。所以,下一个问题是:为什么PHP中的数组使用开销如此之大?答案在这里:-一些帮助来自这里:-仍然是70%的开销,但优于200%。
php -v

PHP 7.3.2-3+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Feb  8 2019 15:43:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.2, Copyright (c) 1998-2018 Zend Technologies