Title: Strange memory behaviour when serializing objects · Issue #402 · igbinary/igbinary · GitHub
Open Graph Title: Strange memory behaviour when serializing objects · Issue #402 · igbinary/igbinary
X Title: Strange memory behaviour when serializing objects · Issue #402 · igbinary/igbinary
Description: Hi there! I'll get straight to the point, consider this simple example: echo memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 1.11 MB for ($i = 0; $i < 100000; $i++) { $array[] = new MyObject('string1', 'string2'); } echo memory_ge...
Open Graph Description: Hi there! I'll get straight to the point, consider this simple example: echo memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 1.11 MB for ($i = 0; $i < 100000; $i++) { $array[] = new MyObject...
X Description: Hi there! I'll get straight to the point, consider this simple example: echo memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 1.11 MB for ($i = 0; $i < 100000; $i++) { $array[]...
Opengraph URL: https://github.com/igbinary/igbinary/issues/402
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Strange memory behaviour when serializing objects","articleBody":"Hi there!\n\nI'll get straight to the point, consider this simple example:\n```php\necho memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 1.11 MB\n\nfor ($i = 0; $i \u003c 100000; $i++) {\n\t$array[] = new MyObject('string1', 'string2');\n}\n\necho memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 11.73 MB \u003c--- Memory usage after initial array of objects is created\n\nigbinary_serialize($array); // \u003c--- results not saved on purpose\n\necho memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 47.59 MB \u003c--- Memory usage after simply calling igbinary_serialize\n\nunset($array);\n\necho memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 2.1 MB \u003c--- Memory usage after the original array is unset\n```\nAs you can see, simply calling `igbinary_serialize` modifies the memory footprint of the original object.\n\nNow this does not happen with arrays at all, so if we use\n```php\nfor ($i = 0; $i \u003c 100000; $i++) {\n\t$array[] = ['string1', 'string2'];\n}\n```\nThe results will be:\n```\nInitial memory usage: 1.11 MB\nAfter array is created: 3.1159133911133 MB\nAfter igbinary_serialize: 3.1159133911133 MB (absolutely 0 bytes changed)\nAfter `unset($array)`: 1.11 MB (back to initial value)\n```\nIs there something that can be done, or am I going crazy? 😄 Thanks a bunch!\n\nP.S.\nWhen using PHPs `serialize`, everything is fine and memory usage does not increase, though after unserializing, the objects take up more memory because there is no string compacting. So would be cool if this could be fixed in `igbinary` 😢 \n\nP.P.S\nFound a hacky workaround to prevent the memory footprint from increasing, so if I do `igbinary_serialize(unserialize(serialize($array)))`, the memory usage does not grow, because I am no longer serializing the original object. But man it feels terrible 😬 ","author":{"url":"https://github.com/DrParanoia","@type":"Person","name":"DrParanoia"},"datePublished":"2025-09-27T00:01:47.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/402/igbinary/issues/402"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:ad2a33e5-3bea-4ccf-b5cf-be17f7bacc25 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D0E4:D9C72:12C1A66:17D0FCA:697EC54A |
| html-safe-nonce | 0f3fa8d0da359f37774b8b636f4b6a17f026eabddaf4ea6794ea874b8f070523 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMEU0OkQ5QzcyOjEyQzFBNjY6MTdEMEZDQTo2OTdFQzU0QSIsInZpc2l0b3JfaWQiOiI1MTM5NDM3ODE4OTc5NzMwNzYyIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 1883df199e6a4b76f74803e5f2853231ca204eefd2aaa006152f7933320ca2f9 |
| hovercard-subject-tag | issue:3459412338 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/igbinary/igbinary/402/issue_layout |
| twitter:image | https://opengraph.githubassets.com/1af3716e31baeab50febafef83839a8c97d0954fbfb33d1ece73fd43c648fd6b/igbinary/igbinary/issues/402 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/1af3716e31baeab50febafef83839a8c97d0954fbfb33d1ece73fd43c648fd6b/igbinary/igbinary/issues/402 |
| og:image:alt | Hi there! I'll get straight to the point, consider this simple example: echo memory_get_usage() / 1024 / 1024 . ' MB' . PHP_EOL; // 1.11 MB for ($i = 0; $i < 100000; $i++) { $array[] = new MyObject... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | DrParanoia |
| hostname | github.com |
| expected-hostname | github.com |
| None | 60279d4097367e16897439d16d6bbe4180663db828c666eeed2656988ffe59f6 |
| turbo-cache-control | no-preview |
| go-import | github.com/igbinary/igbinary git https://github.com/igbinary/igbinary.git |
| octolytics-dimension-user_id | 555243 |
| octolytics-dimension-user_login | igbinary |
| octolytics-dimension-repository_id | 1237364 |
| octolytics-dimension-repository_nwo | igbinary/igbinary |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | true |
| octolytics-dimension-repository_parent_id | 155943 |
| octolytics-dimension-repository_parent_nwo | phadej/igbinary |
| octolytics-dimension-repository_network_root_id | 155943 |
| octolytics-dimension-repository_network_root_nwo | phadej/igbinary |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7c85641c598ad130c74f7bcc27f58575cac69551 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width