相关疑难解决方法(0)

如何确定变量的内存占用(大小)?

PHP(或PHP扩展)中是否有一个函数可以找出给定变量使用了多少内存?sizeof只是告诉我元素/属性的数量.

memory_get_usage有助于它给我整个脚本使用的内存大小.有没有办法为单个变量执行此操作?

请注意,这是在开发机器上,因此加载扩展或调试工具是可行的.

php memory

101
推荐指数
5
解决办法
6万
查看次数

在PHP中需要一个类似于数组的结构,内存使用量最少

在我的PHP脚本中,我需要创建一个> 600k整数的数组.不幸的是,我的web服务器memory_limit设置为32M,所以在初始化数组时,脚本会中止消息

致命错误:8/home/www/myaccount/html/mem_test.php中允许的内存大小为33554432字节(试图分配71个字节)

我知道PHP不会将数组值存储为普通整数,而是存储为比普通整数值大得多的z值(在我的64位系统上为8个字节).我写了一个小脚本来估计每个数组条目使用多少内存,事实证明,它恰好是128个字节.128!我需要> 73M才能存储阵列.不幸的是,网络服务器不在我的控制之下,所以我无法增加memory_limit.

我的问题是,在PHP中是否有可能创建一个使用更少内存的类似数组的结构.我不需要这种结构是关联的(普通的索引访问就足够了).它也不需要动态调整大小 - 我确切知道数组的大小.此外,所有元素都是相同的类型.就像一个好旧的C阵列.


编辑: 所以deceze的解决方案与32位整数一起开箱即用.但即使您使用的是64位系统,pack()似乎也不支持64位整数.为了在我的数组中使用64位整数,我应用了一些位操作.也许下面的片段对某些人有帮助:

function push_back(&$storage, $value)
{
    // split the 64-bit value into two 32-bit chunks, then pass these to pack().
    $storage .= pack('ll', ($value>>32), $value);
}

function get(&$storage, $idx)
{
    // read two 32-bit chunks from $storage and glue them back together.
    return (current(unpack('l', substr($storage, $idx * 8, 4)))<<32 |
            current(unpack('l', substr($storage, $idx * 8+4, 4))));
}
Run Code Online (Sandbox Code Playgroud)

php arrays memory-management out-of-memory

65
推荐指数
5
解决办法
7325
查看次数

标签 统计

php ×2

arrays ×1

memory ×1

memory-management ×1

out-of-memory ×1