Hi

On 1/18/23 18:51, Kamil Tekiela wrote:
As you said yourself, this refactoring has no practical effect on

It has no practical effect *yet*. The headers need to be untangled first before actual optimization can happen.
Or maybe have all
ZEND headers included with a single header?

That would go against the goal of reducing compile times. Much of the time spent when compiling C is parsing megabytes of source code, because deeply nested and/or unnecessary includes will bloat the amount of code the toolchain will need to go through.

Let me give a simple example:

We have the following headers:

a.h: 1 MB.
b.h: Includes a.h and is itself 100 kB in size.
c.h: Includes a.h and is itself 100 kB in size.

foo.c: Includes b.h and c.h, but c.h is not actually used. Is itself 300 kB in size.

Now when compiling foo.c, a total of 2.5 MB of source code need to be parsed, because a.h is included twice. If the unused include for c.h is removed, then it will only be 1.4 MB in total. This multiplies quickly for more complex include chains. I'd like to point to this commit once more:

https://github.com/haproxy/haproxy/commit/340ef2502eae2a37781e460d3590982c0e437fbd

Removing two headers in a single file reduced the total compile by roughly 10%!

Here's two more similar commits:

https://github.com/haproxy/haproxy/commit/e5983ffb3adbf71a8f286094b1c1afce6061d1f3
https://github.com/haproxy/haproxy/commit/1db546eecd3982ffc1ea92c2f542a3b01ce43137

Best regards
Tim Düsterhus

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to