Skip to content
View AaronDMarasco's full-sized avatar
  • Maryland
Block or Report

Block or report AaronDMarasco

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse

Pinned Loading

  1. Beware macros when using C++ STL <al... Beware macros when using C++ STL <algorithm> functions
    1
    Super short summary: Using `ntohs` in code resulted in huge bloat with both `gcc` and `clang`. The preprocessor _must_ see it as a function call, `ntohs()`, to replace it with its built-in equivalent. So using `std::transform` on something that is normally a macro but has a library fallback will cause your code to slow down considerably (and in my case not be able to keep up with a real-time processing flow).
    2
    
                  
    3
    https://gcc.godbolt.org/z/dM2Ge4 is a MWE (also attached to this gist). As of 4 May 2020, both compilers' trunks with `-std=c++17 -Ofast` will `call` the `ntohs` from an internal library with the "naked" `std::transform` call. If your compiler supports lambdas, the second iteration works around the issue. If not, the hand-unrolled third version produces the exact same assembly as the second.
    4
    
                  
    5
    This is because if you dig deep enough, you will find in [`inet/netinet/in.h`](https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=inet/netinet/in.h;hb=HEAD) that `ntohs` is a macro pointing to `__bswap_16`. But without `()`, your preprocessor doesn't know this, so it has to use the library fallback.
  2. opencpi opencpi Public

    Forked from AaronDMarasco-VSI/opencpi

    Open Component Portability Infrastructure

    C

  3. systemd-watchdog systemd-watchdog Public

    Forked from stigok/sd-notify

    sd_notify and sd_watchdog_enabled client functionality for writing Python daemons

    Python 7 1

  4. trac-docker trac-docker Public

    Forked from dixudx/trac-docker

    Trac(http://trac.edgewall.org/) Dockerfile

    Dockerfile 1

  5. git4svn git4svn Public

    git for svn users

    Makefile 1

  6. rpm-cookbook rpm-cookbook Public

    Cookbook of RPM techniques

    Makefile 2 2