Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: type sizes in C (was: Java versus C Speed Comparison)

Author: Miguel A. Ballicora

Date: 15:54:00 01/11/03

Go up one level in this thread


On January 11, 2003 at 17:29:28, Heiner Marxen wrote:

>On January 10, 2003 at 21:34:38, Robert Hyatt wrote:
>
>>On January 10, 2003 at 18:14:09, Miguel A. Ballicora wrote:
>[...]
>>>If you want portable code, use long long for both. If it is a very important
>>>variable use typedef.
>
>That often is not a good solution.  Memory is not exactly for free,
>especially not so in the caches.
>Also (long long) is not exactly portable, either.

I think that you mean "using long long" is not a good solution, rather than
using typedefs. Memory is not free, I agree, that is whay I say that for an
important variable (that could be later an arrayf of them) it is better to use a
typedef. For local variables I do not think that it will really matters in most
of the cases.

If it is really needed an int16_t, int32_t, int64_t that could be defined as a
typedef. That should require a minimum maintance. My point is that it is not a
big deal that the language provide that when I could do it by myself.

However, the solution that you provide, is really *cool* because it reduces that
minimum maintaince to zero. I might steel your idea if I find myself in that
situation!
Thanks.

Miguel

>>By that logic, all that would be safe to use is "long long" which is, in itself,
>>a problem.  If I only need values that fit in 32 bits, I want to be able to use
>>32 bits, and the same for 64 bits...  I want to be able to say what I need,
>>and then let the compiler complain if it can't deliver that.  Which will let
>>me know I have a problem, rather than the present scheme of the compiler
>>assuming something that very well could be wrong...
>
>In a direct sense you are quite right: C does not provide a portable
>solution for this.  "this" being (as I understand it):
>
>I want an integral type of at least N bits.  N a (compile time) constant.
>
>[ If you want types with an exact number of bits, that is even harder,
>  since the platform/compiler may not have that exact size. ]
>
>But one can solve the problem at least partially.
>I've done so for Chest.
>
>It is about portability of the source code (porting binaries is a completely
>different topic), and hence I assume a target platform with a compiler.
>Additionally I assume that we can execute (run) a C program at the same
>platform where we compile it (not a cross compile).
>
>Then I figured, that I _can_ find out the exact bit size of a type like
>	unsigned char
>	unsigned short
>	unsigned int
>	unsigned long
>at _run time_.
>Well, that does not solve my problem immediately, but it helps...
>
>I wrote a small portable program, that at its run time computes the bit
>sizes that fit into the above four unsigned types.  It then does four
>printf's like:
>
>	printf("#define BITS_IN_UNSIGNED_CHAR %d\n", bits_in_unsigned_char);
>
>It also determines the first of these 4 types, that has bit size at least
>8/16/32, and does an appropriate printf():
>
>	printf("typedef unsigned %s	uint32\n", ...);
>
>This program is compiled, and run.
>Its output is stored into a file named "lcltyp.h".
>( All this can be done from the makefile )
>
>Now preparation is complete, and the rest of the program sources include
>that (locally computed, not distributed) "lcltyp.h".
>
>Now I can use any kind of stuff (typedefs, #define's) from the computed
>header, as if that would be a portable way to say it to the C compiler.
>As if C would know by itself.
>In a way I've added some introspection capabilities, which (sadly) are
>missing from C itself.
>
>[ I do not know whether C99 solves some of these issues, I refer to C90 ]
>
>Cheers,
>Heiner



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.