Thread overview |
---|
July 24, 2005 Eliminate duplicated strings ... | ||||
---|---|---|---|---|
| ||||
Is any option of dmc to eliminate duplicated strings in the final executables while linking? (like e.g. in msvc); and possibly storing string constants (like __FILE__) in read only memory - I didn't found anything, even with -o+space the strings are still duplicated in the executable ... normally it is not problem, except .exe size, but when I build 16-bit DOS exes and use __FILE__ in debugging macros, I often reach the DOS data seg size limit :-/ |
July 24, 2005 Re: Eliminate duplicated strings ... | ||||
---|---|---|---|---|
| ||||
Posted in reply to mx0 | <mx0@seznam.cz> wrote in message news:dbvn4v$2576$1@digitaldaemon.com... > Is any option of dmc to eliminate duplicated strings in the final executables > while linking? (like e.g. in msvc); and possibly storing string constants (like > __FILE__) in read only memory - I didn't found anything, even with -o+space the > strings are still duplicated in the executable ... normally it is not problem, > except .exe size, but when I build 16-bit DOS exes and use __FILE__ in debugging > macros, I often reach the DOS data seg size limit :-/ Here's an old technique I used for developing DOS programs because of that problem. -------------------------------- static char __file__[] = __FILE__; #undef assert #define assert(e) ((e) || (local_assert(__LINE__), 0)) void my_assert ( char * , int ); static void local_assert(int line) { my_assert(__file__,line); } ------------------------------------------ which cuts down a lot on the size of the code generated by assert(). |
July 25, 2005 Re: Eliminate duplicated strings ... | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | In article <dc0hsp$1ho$1@digitaldaemon.com>, Walter says... > > > >Here's an old technique I used for developing DOS programs because of that problem. > >-------------------------------- >static char __file__[] = __FILE__; > >#undef assert >#define assert(e) ((e) || (local_assert(__LINE__), 0)) > >void my_assert ( char * , int ); > >static void local_assert(int line) >{ > my_assert(__file__,line); >} >------------------------------------------ > >which cuts down a lot on the size of the code generated by assert(). > > Ok, I know this technique, I only asked if I have some options to do it more natively (and furthermore, this technique, AFAIK, won't work in headers, e.g. inside class templates, 'cause I think I cannot use "static char __file__[] = __FILE__;" in header file included to more cpps). That means, there is no such stuff in dmc, em I right? (I know, rely on this functionality is not the best approach, while the C/C++ compiler is not liable to do such optimization, but it were very handy especially for 16-bit DOS programs). Never mind, I will try to do thinks I need smarter way :). But anyway, thanks for reply. |
July 30, 2005 Re: Eliminate duplicated strings ... | ||||
---|---|---|---|---|
| ||||
Posted in reply to mx0 | <mx0@seznam.cz> wrote in message news:dc24oa$19ak$1@digitaldaemon.com... > Ok, I know this technique, I only asked if I have some options to do it more > natively (and furthermore, this technique, AFAIK, won't work in headers, e.g. > inside class templates, 'cause I think I cannot use "static char __file__[] = > __FILE__;" in header file included to more cpps). That means, there is no such > stuff in dmc, em I right? (I know, rely on this functionality is not the best > approach, while the C/C++ compiler is not liable to do such optimization, but it > were very handy especially for 16-bit DOS programs). Never mind, I will try to > do thinks I need smarter way :). But anyway, thanks for reply. I know you can't get it all into a .h file, but here's what I do: static char __file__[] = __FILE__; #include "tassert.h" It's just two lines that are boilerplate cut & paste per source file. It is especially handy for DOS programs, because not only does it share the __FILE__ string, the local assert function will always be a 'near' function (saving bytes) and each assert only generates the __LINE__ (the __file__ is supplied by the near function), saving even more bytes. |
Copyright © 1999-2021 by the D Language Foundation