c++ - Eliminate duplicated strings ...
- mx0 seznam.cz (6/6) Jul 24 2005 Is any option of dmc to eliminate duplicated strings in the final execut...
- Walter (19/25) Jul 24 2005 (like
- mx0 seznam.cz (9/22) Jul 25 2005 Ok, I know this technique, I only asked if I have some options to do it ...
- Walter (16/24) Jul 30 2005 e.g.
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 :-/
Jul 24 2005
<mx0 seznam.cz> wrote in message news:dbvn4v$2576$1 digitaldaemon.com...Is any option of dmc to eliminate duplicated strings in the finalexecutableswhile linking? (like e.g. in msvc); and possibly storing string constants(like__FILE__) in read only memory - I didn't found anything, evenwith -o+space thestrings are still duplicated in the executable ... normally it is notproblem,except .exe size, but when I build 16-bit DOS exes and use __FILE__ indebuggingmacros, 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().
Jul 24 2005
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.
Jul 25 2005
<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 itmorenatively (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 nosuchstuff in dmc, em I right? (I know, rely on this functionality is not thebestapproach, while the C/C++ compiler is not liable to do such optimization,but itwere very handy especially for 16-bit DOS programs). Never mind, I willtry todo 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.
Jul 30 2005