Re: [ROOT] sizeof(Long_t)

From: Fons Rademakers (Fons.Rademakers@cern.ch)
Date: Sat Nov 04 2000 - 11:11:12 MET


Hi Robert,

   you are right the comments are wrong (should be switched for R__B64),
and in addition we planned to make Long_t always 8 bytes in a portable
way be relying on "long long" for 32 bit environments. However, at the
time many compilers did not support the "long long" type (g++ does).

We will try to revise this code in the coming months with the introduction of
our new automatic shema evolution I/O system.


Cheers, Fons.



On Fri, Nov 03, 2000 at 05:23:06PM -0800, Robert Hatcher wrote:
> I'm confused about the sizeof Long_t.  I'm running ROOT:
>   *   Version   2.25/03 15 September 2000   *
> and g++ gives:
>   Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
>   gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
> 
> In Rtypes.h there is code:
> 
> #ifdef R__B64
> typedef int            Seek_t;      //File pointer
> typedef long           Long_t;      //Signed long integer 4 bytes
> typedef unsigned long  ULong_t;     //Unsigned long integer 4 bytes
> #else
> typedef int            Seek_t;      //File pointer
> typedef long           Long_t;      //Signed long integer 8 bytes
> typedef unsigned long  ULong_t;     //Unsigned long integer 8 bytes
> #endif
> 
> Here Long_t is always typedef'd to "long" even when long isn't 8 bytes.
> The only difference between these two parts is the comments.  I thought
> Long_t was intended to be a uniform size (8 bytes) in a platform 
> independent manner -- just like Int_t is 4 bytes even when "int" isn't.
> But even if it isn't the comments are exactly backwards;  R__B64
> *isn't* defined for this platform so the second block is the relevant one.
> But there the comments say one should expect a 8 byte Long_t when it isn't.
> 
> -robert
> 
> Robert W. Hatcher   |  rhatcher@slac.stanford.edu
> Research Associate  |  650.926.3171  [FAX 4001 or 3587]
> Stanford University |  PO Box 4349, MS #63, Stanford CA 94309
> 
> ============ test_sizeof.C ======================
> #ifndef  __CINT__
> #include <iostream.h>
> #endif
> 
> void test_sizeof()
> {
> 
> #ifdef R__B64
>   cout << "R__B64 is defined " << endl;
> #else
>   cout << "R__B64 is not defined " << endl;
> #endif
>   cout << "sizeof(char)      " << sizeof(char)      << endl;
>   cout << "sizeof(Char_t)    " << sizeof(Char_t)    << endl;
>   cout << "sizeof(short)     " << sizeof(short)     << endl;
>   cout << "sizeof(Short_t)   " << sizeof(Short_t)   << endl;
>   cout << "sizeof(int)       " << sizeof(int)       << endl;
>   cout << "sizeof(Int_t)     " << sizeof(Int_t)     << endl;
>   cout << "sizeof(long)      " << sizeof(long)      << endl;
>   cout << "sizeof(Long_t)    " << sizeof(Long_t)    << endl;
>   cout << "sizeof(float)     " << sizeof(float)     << endl;
>   cout << "sizeof(Float_t)   " << sizeof(Float_t)   << endl;
>   cout << "sizeof(double)    " << sizeof(double)    << endl;
>   cout << "sizeof(Double_t)  " << sizeof(Double_t)  << endl;
> #ifndef  __CINT__
>   cout << "sizeof(long long) " << sizeof(long long) << endl;
> #else
>   cout << "CINT doesn't recognize 'long long' by default " << endl;
> #endif
> }

-- 
Org:    CERN, European Laboratory for Particle Physics.
Mail:   1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
WWW:    http://root.cern.ch/~rdm/            Fax:   +41 22 7677910



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:36 MET