]> vcs.slashdirt.org Git - sw/tic2json.git/commitdiff

vcs.slashdirt.org Git - sw/tic2json.git/commitdiff

git git / sw / tic2json.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 863984e)
Further reduce memory pressure by using const char for labels
2021年8月14日 13:19:55 +0000 (15:19 +0200)
2021年8月15日 11:21:02 +0000 (13:21 +0200)
This essentially halves the number of allocations by only using them for
dynamic data (namely horodate and data).

Valgrind output on 100KB test:
- Before:
see previous commit
- After:
thread 1 finished and used 21967 bytes out of 8388608 on its stack. Margin: 8366641 bytes.
total heap usage: 4,961 allocs, 4,961 frees, 83,025 bytes allocated


diff --git a/tic.h b/tic.h
index 66bbfd4f2464ea20139e8e823f4cb92e9260152e..3d18e9246e61997ac31b00e0eaeb546bed4b3438 100644 (file)
--- a/tic.h
+++ b/tic.h
@@ -13,7 +13,7 @@ enum f_type { F_STRING, F_INT, F_HEX };
struct tic_field {
enum f_type type;
- char *label;
+ const char *label;
char *horodate;
union {
char *s;
diff --git a/tic.l b/tic.l
index 29b6e851659c4445984b9e68cf5c44637cfdeb0d..927a1ea1b8239e1c5039208cf2854144fca7b1bd 100644 (file)
--- a/tic.l
+++ b/tic.l
@@ -84,77 +84,77 @@ MOTDETAT
*/
/* etiquettes - mode standard */
-ADSC { crc_calc(); yylval.text = strdup(yytext); return ET_ADSC; }
-VTIC { crc_calc(); yylval.text = strdup(yytext); return ET_VTIC; }
-DATE { crc_calc(); yylval.text = strdup(yytext); return ET_DATE; }
-NGTF { crc_calc(); yylval.text = strdup(yytext); return ET_NGTF; }
-LTARF { crc_calc(); yylval.text = strdup(yytext); return ET_LTARF; }
-EAST { crc_calc(); yylval.text = strdup(yytext); return ET_EAST; }
-EASF01 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF01; }
-EASF02 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF02; }
-EASF03 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF03; }
-EASF04 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF04; }
-EASF05 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF05; }
-EASF06 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF06; }
-EASF07 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF07; }
-EASF08 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF08; }
-EASF09 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF09; }
-EASF10 { crc_calc(); yylval.text = strdup(yytext); return ET_EASF10; }
-EASD01 { crc_calc(); yylval.text = strdup(yytext); return ET_EASD01; }
-EASD02 { crc_calc(); yylval.text = strdup(yytext); return ET_EASD02; }
-EASD03 { crc_calc(); yylval.text = strdup(yytext); return ET_EASD03; }
-EASD04 { crc_calc(); yylval.text = strdup(yytext); return ET_EASD04; }
-EAIT { crc_calc(); yylval.text = strdup(yytext); return ET_EAIT; }
-ERQ1 { crc_calc(); yylval.text = strdup(yytext); return ET_ERQ1; }
-ERQ2 { crc_calc(); yylval.text = strdup(yytext); return ET_ERQ2; }
-ERQ3 { crc_calc(); yylval.text = strdup(yytext); return ET_ERQ3; }
-ERQ4 { crc_calc(); yylval.text = strdup(yytext); return ET_ERQ4; }
-IRMS1 { crc_calc(); yylval.text = strdup(yytext); return ET_IRMS1; }
-IRMS2 { crc_calc(); yylval.text = strdup(yytext); return ET_IRMS2; }
-IRMS3 { crc_calc(); yylval.text = strdup(yytext); return ET_IRMS3; }
-URMS1 { crc_calc(); yylval.text = strdup(yytext); return ET_URMS1; }
-URMS2 { crc_calc(); yylval.text = strdup(yytext); return ET_URMS2; }
-URMS3 { crc_calc(); yylval.text = strdup(yytext); return ET_URMS3; }
-PREF { crc_calc(); yylval.text = strdup(yytext); return ET_PREF; }
-PCOUP { crc_calc(); yylval.text = strdup(yytext); return ET_PCOUP; }
-SINSTS { crc_calc(); yylval.text = strdup(yytext); return ET_SINSTS; }
-SINSTS1 { crc_calc(); yylval.text = strdup(yytext); return ET_SINSTS1; }
-SINSTS2 { crc_calc(); yylval.text = strdup(yytext); return ET_SINSTS2; }
-SINSTS3 { crc_calc(); yylval.text = strdup(yytext); return ET_SINSTS3; }
-SMAXSN { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSN; }
-SMAXSN1 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSN1; }
-SMAXSN2 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSN2; }
-SMAXSN3 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSN3; }
-SMAXSN-1 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSNM1; }
-SMAXSN1-1 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSN1M1; }
-SMAXSN2-1 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSN2M1; }
-SMAXSN3-1 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXSN3M1; }
-SINSTI { crc_calc(); yylval.text = strdup(yytext); return ET_SINSTI; }
-SMAXIN { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXIN; }
-SMAXIN-1 { crc_calc(); yylval.text = strdup(yytext); return ET_SMAXINM1; }
-CCASN { crc_calc(); yylval.text = strdup(yytext); return ET_CCASN; }
-CCASN-1 { crc_calc(); yylval.text = strdup(yytext); return ET_CCASNM1; }
-CCAIN { crc_calc(); yylval.text = strdup(yytext); return ET_CCAIN; }
-CCAIN-1 { crc_calc(); yylval.text = strdup(yytext); return ET_CCAINM1; }
-UMOY1 { crc_calc(); yylval.text = strdup(yytext); return ET_UMOY1; }
-UMOY2 { crc_calc(); yylval.text = strdup(yytext); return ET_UMOY2; }
-UMOY3 { crc_calc(); yylval.text = strdup(yytext); return ET_UMOY3; }
-STGE { crc_calc(); yylval.text = strdup(yytext); return ET_STGE; }
-DPM1 { crc_calc(); yylval.text = strdup(yytext); return ET_DPM1; }
-FPM1 { crc_calc(); yylval.text = strdup(yytext); return ET_FPM1; }
-DPM2 { crc_calc(); yylval.text = strdup(yytext); return ET_DPM2; }
-FPM2 { crc_calc(); yylval.text = strdup(yytext); return ET_FPM2; }
-DPM3 { crc_calc(); yylval.text = strdup(yytext); return ET_DPM3; }
-FPM3 { crc_calc(); yylval.text = strdup(yytext); return ET_FPM3; }
-MSG1 { crc_calc(); yylval.text = strdup(yytext); return ET_MSG1; }
-MSG2 { crc_calc(); yylval.text = strdup(yytext); return ET_MSG2; }
-PRM { crc_calc(); yylval.text = strdup(yytext); return ET_PRM; }
-RELAIS { crc_calc(); yylval.text = strdup(yytext); return ET_RELAIS; }
-NTARF { crc_calc(); yylval.text = strdup(yytext); return ET_NTARF; }
-NJOURF { crc_calc(); yylval.text = strdup(yytext); return ET_NJOURF; }
-NJOURF\+1 { crc_calc(); yylval.text = strdup(yytext); return ET_NJOURFP1; }
-PJOURF\+1 { crc_calc(); yylval.text = strdup(yytext); return ET_PJOURFP1; }
-PPOINTE { crc_calc(); yylval.text = strdup(yytext); return ET_PPOINTE; }
+ADSC { crc_calc(); yylval.label = "ADSC"; return ET_ADSC; }
+VTIC { crc_calc(); yylval.label = "VTIC"; return ET_VTIC; }
+DATE { crc_calc(); yylval.label = "DATE"; return ET_DATE; }
+NGTF { crc_calc(); yylval.label = "NGTF"; return ET_NGTF; }
+LTARF { crc_calc(); yylval.label = "LTARF"; return ET_LTARF; }
+EAST { crc_calc(); yylval.label = "EAST"; return ET_EAST; }
+EASF01 { crc_calc(); yylval.label = "EASF01"; return ET_EASF01; }
+EASF02 { crc_calc(); yylval.label = "EASF02"; return ET_EASF02; }
+EASF03 { crc_calc(); yylval.label = "EASF03"; return ET_EASF03; }
+EASF04 { crc_calc(); yylval.label = "EASF04"; return ET_EASF04; }
+EASF05 { crc_calc(); yylval.label = "EASF05"; return ET_EASF05; }
+EASF06 { crc_calc(); yylval.label = "EASF06"; return ET_EASF06; }
+EASF07 { crc_calc(); yylval.label = "EASF07"; return ET_EASF07; }
+EASF08 { crc_calc(); yylval.label = "EASF08"; return ET_EASF08; }
+EASF09 { crc_calc(); yylval.label = "EASF09"; return ET_EASF09; }
+EASF10 { crc_calc(); yylval.label = "EASF10"; return ET_EASF10; }
+EASD01 { crc_calc(); yylval.label = "EASD01"; return ET_EASD01; }
+EASD02 { crc_calc(); yylval.label = "EASD02"; return ET_EASD02; }
+EASD03 { crc_calc(); yylval.label = "EASD03"; return ET_EASD03; }
+EASD04 { crc_calc(); yylval.label = "EASD04"; return ET_EASD04; }
+EAIT { crc_calc(); yylval.label = "EAIT"; return ET_EAIT; }
+ERQ1 { crc_calc(); yylval.label = "ERQ1"; return ET_ERQ1; }
+ERQ2 { crc_calc(); yylval.label = "ERQ2"; return ET_ERQ2; }
+ERQ3 { crc_calc(); yylval.label = "ERQ3"; return ET_ERQ3; }
+ERQ4 { crc_calc(); yylval.label = "ERQ4"; return ET_ERQ4; }
+IRMS1 { crc_calc(); yylval.label = "IRMS1"; return ET_IRMS1; }
+IRMS2 { crc_calc(); yylval.label = "IRMS2"; return ET_IRMS2; }
+IRMS3 { crc_calc(); yylval.label = "IRMS3"; return ET_IRMS3; }
+URMS1 { crc_calc(); yylval.label = "URMS1"; return ET_URMS1; }
+URMS2 { crc_calc(); yylval.label = "URMS2"; return ET_URMS2; }
+URMS3 { crc_calc(); yylval.label = "URMS3"; return ET_URMS3; }
+PREF { crc_calc(); yylval.label = "PREF"; return ET_PREF; }
+PCOUP { crc_calc(); yylval.label = "PCOUP"; return ET_PCOUP; }
+SINSTS { crc_calc(); yylval.label = "SINSTS"; return ET_SINSTS; }
+SINSTS1 { crc_calc(); yylval.label = "SINSTS1"; return ET_SINSTS1; }
+SINSTS2 { crc_calc(); yylval.label = "SINSTS2"; return ET_SINSTS2; }
+SINSTS3 { crc_calc(); yylval.label = "SINSTS3"; return ET_SINSTS3; }
+SMAXSN { crc_calc(); yylval.label = "SMAXSN"; return ET_SMAXSN; }
+SMAXSN1 { crc_calc(); yylval.label = "SMAXSN1"; return ET_SMAXSN1; }
+SMAXSN2 { crc_calc(); yylval.label = "SMAXSN2"; return ET_SMAXSN2; }
+SMAXSN3 { crc_calc(); yylval.label = "SMAXSN3"; return ET_SMAXSN3; }
+SMAXSN-1 { crc_calc(); yylval.label = "SMAXSN-1"; return ET_SMAXSNM1; }
+SMAXSN1-1 { crc_calc(); yylval.label = "SMAXSN1-1"; return ET_SMAXSN1M1; }
+SMAXSN2-1 { crc_calc(); yylval.label = "SMAXSN2-1"; return ET_SMAXSN2M1; }
+SMAXSN3-1 { crc_calc(); yylval.label = "SMAXSN3-1"; return ET_SMAXSN3M1; }
+SINSTI { crc_calc(); yylval.label = "SINSTI"; return ET_SINSTI; }
+SMAXIN { crc_calc(); yylval.label = "SMAXIN"; return ET_SMAXIN; }
+SMAXIN-1 { crc_calc(); yylval.label = "SMAXIN-1"; return ET_SMAXINM1; }
+CCASN { crc_calc(); yylval.label = "CCASN"; return ET_CCASN; }
+CCASN-1 { crc_calc(); yylval.label = "CCASN-1"; return ET_CCASNM1; }
+CCAIN { crc_calc(); yylval.label = "CCAIN"; return ET_CCAIN; }
+CCAIN-1 { crc_calc(); yylval.label = "CCAIN-1"; return ET_CCAINM1; }
+UMOY1 { crc_calc(); yylval.label = "UMOY1"; return ET_UMOY1; }
+UMOY2 { crc_calc(); yylval.label = "UMOY2"; return ET_UMOY2; }
+UMOY3 { crc_calc(); yylval.label = "UMOY3"; return ET_UMOY3; }
+STGE { crc_calc(); yylval.label = "STGE"; return ET_STGE; }
+DPM1 { crc_calc(); yylval.label = "DPM1"; return ET_DPM1; }
+FPM1 { crc_calc(); yylval.label = "FPM1"; return ET_FPM1; }
+DPM2 { crc_calc(); yylval.label = "DPM2"; return ET_DPM2; }
+FPM2 { crc_calc(); yylval.label = "FPM2"; return ET_FPM2; }
+DPM3 { crc_calc(); yylval.label = "DPM3"; return ET_DPM3; }
+FPM3 { crc_calc(); yylval.label = "FPM3"; return ET_FPM3; }
+MSG1 { crc_calc(); yylval.label = "MSG1"; return ET_MSG1; }
+MSG2 { crc_calc(); yylval.label = "MSG2"; return ET_MSG2; }
+PRM { crc_calc(); yylval.label = "PRM"; return ET_PRM; }
+RELAIS { crc_calc(); yylval.label = "RELAIS"; return ET_RELAIS; }
+NTARF { crc_calc(); yylval.label = "NTARF"; return ET_NTARF; }
+NJOURF { crc_calc(); yylval.label = "NJOURF"; return ET_NJOURF; }
+NJOURF\+1 { crc_calc(); yylval.label = "NJOURF+1"; return ET_NJOURFP1; }
+PJOURF\+1 { crc_calc(); yylval.label = "PJOURF+1"; return ET_PJOURFP1; }
+PPOINTE { crc_calc(); yylval.label = "PPOINTE"; return ET_PPOINTE; }
{HORODATE} { crc_calc(); yylval.text = strdup(yytext); return TOK_HDATE; }
{DATAC}+ { crc_calc(); yylval.text = strdup(yytext); return TOK_DATA; }
diff --git a/tic.y b/tic.y
index e9ed428eac236f3753adbd043b9a9e9d299ea407..4aec1da9db9dfcd974fb4503c5b307c8bbd83054 100644 (file)
--- a/tic.y
+++ b/tic.y
@@ -31,7 +31,7 @@ static int hooked;
static char fdelim;
static int mask_allzeros;
-void make_field(struct tic_field *field, enum f_type type, char *label, char *horodate, char *data)
+void make_field(struct tic_field *field, enum f_type type, const char *label, char *horodate, char *data)
{
if (!field)
return;
@@ -78,7 +78,6 @@ void print_field(struct tic_field *field)
void free_field(struct tic_field *field)
{
- free(field->label);
free(field->horodate);
switch (field->type) {
case F_STRING:
@@ -93,6 +92,7 @@ void free_field(struct tic_field *field)
%union {
char *text;
+ const char *label;
struct tic_field field;
}
@@ -103,21 +103,21 @@ void free_field(struct tic_field *field)
%token <text> TOK_HDATE TOK_DATA
-%token <text> ET_ADSC ET_VTIC ET_DATE ET_NGTF ET_LTARF
-%token <text> ET_EAST ET_EASF01 ET_EASF02 ET_EASF03 ET_EASF04 ET_EASF05 ET_EASF06 ET_EASF07 ET_EASF08 ET_EASF09 ET_EASF10
-%token <text> ET_EASD01 ET_EASD02 ET_EASD03 ET_EASD04 ET_EAIT ET_ERQ1 ET_ERQ2 ET_ERQ3 ET_ERQ4
-%token <text> ET_IRMS1 ET_IRMS2 ET_IRMS3 ET_URMS1 ET_URMS2 ET_URMS3 ET_PREF ET_PCOUP
-%token <text> ET_SINSTS ET_SINSTS1 ET_SINSTS2 ET_SINSTS3 ET_SMAXSN ET_SMAXSN1 ET_SMAXSN2 ET_SMAXSN3
-%token <text> ET_SMAXSNM1 ET_SMAXSN1M1 ET_SMAXSN2M1 ET_SMAXSN3M1 ET_SINSTI ET_SMAXIN ET_SMAXINM1
-%token <text> ET_CCASN ET_CCASNM1 ET_CCAIN ET_CCAINM1 ET_UMOY1 ET_UMOY2 ET_UMOY3 ET_STGE ET_DPM1 ET_FPM1 ET_DPM2 ET_FPM2 ET_DPM3 ET_FPM3
-%token <text> ET_MSG1 ET_MSG2 ET_PRM ET_RELAIS ET_NTARF ET_NJOURF ET_NJOURFP1 ET_PJOURFP1 ET_PPOINTE
+%token <label> ET_ADSC ET_VTIC ET_DATE ET_NGTF ET_LTARF
+%token <label> ET_EAST ET_EASF01 ET_EASF02 ET_EASF03 ET_EASF04 ET_EASF05 ET_EASF06 ET_EASF07 ET_EASF08 ET_EASF09 ET_EASF10
+%token <label> ET_EASD01 ET_EASD02 ET_EASD03 ET_EASD04 ET_EAIT ET_ERQ1 ET_ERQ2 ET_ERQ3 ET_ERQ4
+%token <label> ET_IRMS1 ET_IRMS2 ET_IRMS3 ET_URMS1 ET_URMS2 ET_URMS3 ET_PREF ET_PCOUP
+%token <label> ET_SINSTS ET_SINSTS1 ET_SINSTS2 ET_SINSTS3 ET_SMAXSN ET_SMAXSN1 ET_SMAXSN2 ET_SMAXSN3
+%token <label> ET_SMAXSNM1 ET_SMAXSN1M1 ET_SMAXSN2M1 ET_SMAXSN3M1 ET_SINSTI ET_SMAXIN ET_SMAXINM1
+%token <label> ET_CCASN ET_CCASNM1 ET_CCAIN ET_CCAINM1 ET_UMOY1 ET_UMOY2 ET_UMOY3 ET_STGE ET_DPM1 ET_FPM1 ET_DPM2 ET_FPM2 ET_DPM3 ET_FPM3
+%token <label> ET_MSG1 ET_MSG2 ET_PRM ET_RELAIS ET_NTARF ET_NJOURF ET_NJOURFP1 ET_PJOURFP1 ET_PPOINTE
-%type <text> etiquette_str_horodate etiquette_str_nodate etiquette_int_horodate etiquette_int_nodate etiquette_hex_nodate
+%type <label> etiquette_str_horodate etiquette_str_nodate etiquette_int_horodate etiquette_int_nodate etiquette_hex_nodate
%type <field> field_horodate field_nodate field
%destructor { free($$); } <text>
%destructor { free_field(&$$); } <field>
-%destructor { } <>
+%destructor { } <> <*>
%%
tic2json TIC parser/converter
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /