Ik'ben op zoek naar gedetailleerde informatie over de grootte van C++ basistypes. Ik weet dat dit afhangt van de architectuur (16 bits, 32 bits, 64 bits) en de compiler.
Maar zijn er standaarden voor C++?
Ik'gebruik Visual Studio 2008 op een 32-bits architectuur. Dit is wat ik krijg:
char : 1 byte
short : 2 bytes
int : 4 bytes
long : 4 bytes
float : 4 bytes
double: 8 bytes
Ik heb geprobeerd, zonder veel succes, betrouwbare informatie te vinden die de grootte van char
, short
, int
, long
, double
, float
(en andere types waar ik niet aan gedacht heb) onder verschillende architecturen en compilers aangeeft.
In de praktijk bestaat zoiets niet. Vaak kun je verwachten dat std::size_t
de unsigned native integer grootte op de huidige architectuur vertegenwoordigt. d.w.z. 16-bit, 32-bit of 64-bit, maar het is'niet altijd het geval zoals aangegeven in de opmerkingen bij dit antwoord.
Voor zover alle andere ingebouwde typen gaan, hangt het echt af van de compiler. Hier's twee uittreksels uit het huidige werkontwerp van de laatste C++ standaard:
Er zijn vijf standaard signed integer types : signed char, short int, int, long int, en long long int. In deze lijst biedt elk type ten minste evenveel opslag als die ervoor in de lijst.
Voor elk van de standaard signed integer types bestaat er een overeenkomstig (maar verschillend) standaard unsigned integer type: unsigned char, unsigned short int, unsigned int, unsigned long int, en unsigned long int, die elk dezelfde hoeveelheid opslagruimte innemen en dezelfde uitlijningsvereisten hebben.
Als je wilt, kun je statisch (compile-time) de grootte van deze fundamentele types vastleggen. Het zal mensen waarschuwen om na te denken over het porten van uw code als de sizeof aannames veranderen.
Zoals gezegd moet de grootte de huidige architectuur weerspiegelen. Je zou een kijkje kunnen nemen in limits.h
als je wilt zien hoe je huidige compiler de dingen afhandelt.
Zoals u al zei - het hangt grotendeels af van de compiler en het platform. Kijk hiervoor in de ANSI standaard, http://home.att.net/~jackklein/c/inttypes.html
Hier is die voor de Microsoft compiler: Data Type Ranges.