RE: [PHP-DEV] Windows (Visual Studio) compiler stuff
| From: | Anatol Belski | Date: | Mon, 16 Nov 2015 13:22:00 +0000 |
| Subject: | RE: [PHP-DEV] Windows (Visual Studio) compiler stuff | ||
| References: | 1 | Groups: | php.internals php.internals.win |
| Request: | Send a blank email to internals+get-89233@lists.php.net to get a copy of this message | ||
Hello Matt,
> -----Original Message-----
> From: Matt Wilmas [mailto:php_lists@realplain.com]
> Sent: Sunday, November 15, 2015 11:31 PM
> To: internals@lists.php.net; internals-win@lists.php.net
> Cc: Dmitry Stogov <dmitry@zend.com>; Anatol Belski
<anatol.php@belski.net>;
> Pierre Joye <pierre.php@gmail.com>
> Subject: [PHP-DEV] Windows (Visual Studio) compiler stuff
>
> Hi Dmitry, Anatol, Pierre (etc.), and all,
>
> I'm back now, I think, after a much longer (unintentional) break than I
expected.
> Be coming very soon with what I was doing in the summer (param parsing
stuff)
> -- *now* it works with MSVC too, barring any fragility, as I accidentally
> discovered last month...
>
> I've been "discovering" a lot with the wacky Visual Studio compiler! :-)
This
> message is about the 2 I found today.
>
> The first simple thing was probably just overlooked, but noticed it while
looking
> up __declspec. zend_never_inline has always been empty (I guess) for
MSVC,
> but there's actually a __declspec(noinline) that can be used (and works as
> expected). A simple and obvious change to bring it in line with the other
> compilers?
>
According to the docs __declspec(noinline) is specific to C++. Also with VS
it's always much more tedious to inline something than the opposite. These
are the main two reasons it's disregarded ATM. We can add it for compliance
with C++, but it'll in best case have no effect in the PHP core. Should be
tested before, though.
>
> The second "issue" is with the zend_always_inline functions, I noticed
this
> summer. Did anyone else know that MSVC leaves a *copy* of those functions
in
> the output files (DLLs)? What's the point of that? When they've been
inlined,
> and not referenced otherwise, there should be no reason to emit code for a
> standalone function!
>
> I remembered after seeing that behavior that a bit of my own
__forceinline'd
> code did NOT have extra function code, but forgot to investigate until
today.
> What's different about my function definition? No "static"
> specifier! So that's the key. :-)
>
> But... non-static would create duplicate symbols, I thought. But no, it
works!
> With just __forceinline, there's no errors. :^)
>
> Can something be done about this? It would cut the binary size down a
bit.
> A zend_static macro to be used with zend_always_inline...?
>
I'd ask you for some concrete case for this, as I'm not sure to understand
exactly what you mean. The only case where an extra code would be generated
is with "__declspec(export) inline", but that's not the case anywhere within
PHP.
Regards
Anatol