[英]PHP arrays memory usage
我正在尝试找到一种将大量字符串映射到int的方法。 我使用数组尝试了一下,发现了我不理解的行为。 当我按字符串索引数组(array('someStirng'=> 1))时,它消耗的内存少于反之(array(1 =>'someString'))。 这是否意味着,最好按字符串对数组进行索引,然后将int用作大量的string-int对的值,或者有什么用呢? 为什么会有这么大的内存分配差异?
function gen() {
static $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < 8; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
按字符串索引-返回490 KB
$a = array();
for($x = 0;$x < 100000;$x++){
$a[gen()] = $x;
}
echo (memory_get_usage() / 1024) . ' KB';
按整数索引-返回10790.2890625 KB(比第一种情况多22倍,但存储的信息量相同!)
$a = array();
for($x = 0;$x < 100000;$x++){
$a[$x] = gen();
}
echo (memory_get_usage() / 1024) . ' KB';
当我使用代码重复实验时,整数索引得到18 072 000字节,字符串索引得到16 471 960字节。 差别不大,这可以归因于数组键及其值的不同内存管理。
使用memory_get_peak_usage(true)
会产生非常相似的结果。 计算在for循环之前和之后的内存使用差异,我得到了18 087 936字节(带整数索引)和16 515 072字节(带字符串索引)。
这是一个很小的差异,可以通过对数组键和数组值进行不同的内部内存管理来解释。 也许因为数组键仅限于标量而数组值不受限制,所以PHP可以在某个地方进行优化。
无论如何,就像@ ed-heal所说的那样,无论您想做什么,都使用最佳的数据结构。 内存使用可能不是那么重要,如果不是,那么PHP可能不是该工具。
这个循环
for ($i = 0; $i < 8; $i++) {
有八次做生意
哪里像这个循环
for($x = 0;$x < 100000;$x++){
还有一点!
现在让我考虑问题出在哪里...
编辑
只是注意到沙子已经变了。
使用适合于手头任务的任何数据结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.