apc_sma_info() provides one interesting information which, maybe, could explain why happens.
Executing apc_store() with a non-serialized data produces to me, in block_lists index the following values:
Array
(
[0] => Array
(
[size] => 608
[offset] => 33152
)
[1] => Array
(
[size] => 5589032
[offset] => 11211992
)
[2] => Array
(
[size] => 2175976
[offset] => 31378408
)
)
While serializing them manually produces:
Array
(
[0] => Array
(
[size] => 11178232
[offset] => 33760
)
[1] => Array
(
[size] => 1210040
[offset] => 16801024
)
[2] => Array
(
[size] => 15542104
[offset] => 18012280
)
)
It's curious, but seems that with a manual serialization, APC splits the first and last pieces of data in a larger blocks, doing a better disposition of content.
Doesn't seem to be something trivial because I ran this test a couple times and I got similar results everytime.