Ich habe einen schwerwiegenden Engpass in meinem Projekt entdeckt - etwa ein Viertel der gesamten Ausführungszeit ist verschwendet in tzset
Funktion (von mktime
aufgerufen).Include-Header von Glibc
Ich untersuchte tzset sources (den Code, ab Zeile 378) und festgestellt, dass Einstellung TZ Umgebungsvariable einmal erheblich seine Ausführungszeit reduzieren, denn es ist eine Zeitzone-Datei (zum Beispiel /usr/local/etc/zoneinfo
in meinem O), wenn TZ liest Umgebungsvariable ist nicht festgelegt.
Ich würde diese Datei lesen und die Umgebungsvariable festlegen, aber der Speicherort der Datei kann auf verschiedenen Grundrissen abweichen. Also, was ich tun werde, ist irgendwie den Code wiederverwenden tzset
verwendet für diese Zwecke. Dies mag einfach, geben Sie einfach den Header tzset
verwendet zur Ortung und Zeitzone Informationen abrufen, und diese Funktionalität nutzen :)
#include <timezone/tzfile.h>
aber ich weiß wirklich nicht, wie es zu tun, ich glibc Header bedeuten verwenden. Compiler kennt diesen Header nicht (meine IDE, Clion, sieht sie auch nicht). Ich bin wirklich dabei geblieben.
Sie haben grundsätzlich zwei verschiedene Arten. Fügen Sie zu Ihrem 'configure' Skript (Sie wissen, wie man' autoconf' Skripte schreibt - das ist so ziemlich eine obligatorische Fähigkeit für jeden, der auf nicht-proprietären POSIX-basierten Betriebssystemen entwickelt - richtig?), Die nach Zoneninfo in a sucht feste Menge von Orten, und verwenden Sie das, um eine Laufzeitkonstante zu kompilieren. Oder beziehen Sie den Speicherort von einer Umgebungsvariablen, die vor dem Ausführen der Anwendung festgelegt werden muss. Diese Situation ist wirklich, was "autoconf", und der Rest der GNU-Toolchain, ist für entwickelt. –
"Use autotools" ist keine hilfreiche Antwort auf jemanden, der fragt, wie man etwas in CMake macht. –