mrsuh / php-var-sizeof
提供获取任何 PHP 变量完整大小的函数
1.3.0
2024-06-13 20:14 UTC
Requires
- php: >=7.4
- ext-ffi: *
Requires (Dev)
- maddhatter/markdown-table: ^1.0
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-13 20:52:10 UTC
README
获取任何 PHP 变量大小的函数(以字节为单位)。
它比 memory_get_usage()
更精确地计算 PHP 变量的总大小,但它有 限制。
工作原理
var_sizeof()
和 var_class_sizeof()
使用 FFI 访问 PHP 变量的内部结构。
它计算内部结构的大小,如 zval
、_zend_array
、_zend_object
等,以及为它们分配的额外内存。
它不包括处理器/函数等内存。
要求
- PHP >= 7.4(带有 FFI)
- Linux(x86_64/aarch64) / Darwin(x86_64/arm64)
如何安装
composer require mrsuh/php-var-sizeof
函数
int var_sizeof(mixed $var);
int var_class_sizeof(mixed $var);
使用方法
<?php require_once __DIR__ . '/vendor/autoload.php'; $int = 1; printf("variable \$int size: %d bytes\n", var_sizeof($int)); $array = array_fill(0, 100, $a); printf("variable \$array size: %d bytes\n", var_sizeof($array)); $object = new \stdClass(); printf("variable \$object size: %d bytes\n", var_sizeof($object)); printf("class \$object size: %d bytes\n", var_class_sizeof($object));
var_sizeof 与 memory_get_usage 的比较
PHP 8.1.2 Linux(x86_64)
⚠️ 限制
- 仅与用户空间对象和 SPL \ArrayIterator 正确工作
- 不适用于复杂结构,如扩展/资源/可调用/函数
- 要计算对象的总大小,需要使用
var_sizeof()
和var_class_sizeof()
对于贡献者
如何重现上面的数字表
git clone --recurse-submodules git@github.com:mrsuh/php-var-sizeof.git && cd php-var-sizeof composer install docker build -t image-php-var-sizeof . docker run -it --rm --name my-running-script -v "$PWD":/app image-php-var-sizeof php bin/render-table.php
如何编译库
git submodule update --init --recursive cd php-src ./buildconf ./configure --with-ffi --with-iconv=/opt/homebrew/opt/libiconv cd .. make DEBUG=1
docker build -t php-var-sizeof -f Dockerfile-compile . docker run -it -v $(pwd)/library:/code/library php-var-sizeof bash cd /code make DEBUG=1