I have the following test code:
/* empty string */
$start_mem = memory_get_usage();
$s = '';
echo (memory_get_usage() - $start_mem); // 24
/* 1 */
$start_mem = memory_get_usage();
$s = '1';
echo (memory_get_usage() - $start_mem); // 24
/* 1234567 */
$start_mem = memory_get_usage();
$s = '1';
echo (memory_get_usage() - $start_mem); // 24
/* 12345678 */
$start_mem = memory_get_usage();
$s = '12345678';
echo (memory_get_usage() - $start_mem); // 32
/* 123456789012345 */
$start_mem = memory_get_usage();
$s = '123456789012345';
echo (memory_get_usage() - $start_mem); // 32
/* 1234567890123456 */
$start_mem = memory_get_usage();
$s = '1234567890123456';
echo (memory_get_usage() - $start_mem); // 40
Windows 7 x64 PHP 7.0.2 x86
Does this mean that PHP is allocating a minimum of 8 bytes of memory to a string variable regardless of its size? (1 byte denoting a string)
I believe the 24 for $s = '';
is due to the assignment of a hash?
Is this by design or is it just how the C-code works under the hood?