Archief - [PROG]C++ Is er een verschil in het maken van...

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

IcefoxXx

Legacy Member
een 32bits en een 64 bits programma? Waarschijnlijk wel, maar mijn eigenlijke vraag is: Wat?

Ik sta op het punt nog eens opnieuw te beginnen met c++. Ik heb het een tijdje geleden eens geprobeerd. (Oude thread die ik toen gemaakt had)

Nu heb ik onlangs mijn boek nog eens bovengehaald (c++ grand cru van Steven Holzner) en weer beginnen lezen.

Ik zou dus nu graag nog eens opnieuw beginnen, maar wat ik mijn nu afvraag is of ik ergens voor moet opletten, aangezien ik een nieuwe computer heb die een 64bits processor heeft.

Dank bij voorbaat,

IcefoxXX

Tyfius

Legacy Member
Neen, daar is geen verschil tussen, alleen als gij specifieke hardware instructies gaat gebruiken zou het kunnen dat ge met dergelijke zaken zult moeten rekening houden.

De C++ standaard definieert ook niets als 32bit of 64bit.

IcefoxXx

Legacy Member
Tyfius zei:
Neen, daar is geen verschil tussen, alleen als gij specifieke hardware instructies gaat gebruiken zou het kunnen dat ge met dergelijke zaken zult moeten rekening houden.

De C++ standaard definieert ook niets als 32bit of 64bit.
Bedankt voor je snelle reply:niceone:
Nu kan ik er volledig voor gaan. :)

killgore

Legacy Member
Er is wel degelijk een verschil in die zin dat de grootte van bepaalde variabelen anders zullen zijn (een int zal bv. 64 bit zijn nu, duh).

Maar als je altijd proper code en zaken als sizeof gebruikt (dus niet uitgaat van sizes) zal je in principe nooit in de problemen komen :).

Als je wat meer low-lev gaat zal je natuurlijk wel moeten opletten. maar dat zal wel niet in het begin :).

IcefoxXx

Legacy Member
killgore zei:
Er is wel degelijk een verschil in die zin dat de grootte van bepaalde variabelen anders zullen zijn (een int zal bv. 64 bit zijn nu, duh).

Maar als je altijd proper code en zaken als sizeof gebruikt (dus niet uitgaat van sizes) zal je in principe nooit in de problemen komen :).

Als je wat meer low-lev gaat zal je natuurlijk wel moeten opletten. maar dat zal wel niet in het begin :).

Ik dacht wel dat er iets zou veranderen aan de grote van variabelen zoals int, maar uiteindelijk, in 32bit (of 64) kan er toch al een groot getal, is het niet?

Bavo aka Joske

Legacy Member
Daar gaat het imo niet over. Het gaat meer over de geheugenadressering AFAIK. Je kan dan waarschijnlijk pointers maken die groter zijn dan 32 bit.

Tyfius

Legacy Member
killgore zei:
Er is wel degelijk een verschil in die zin dat de grootte van bepaalde variabelen anders zullen zijn (een int zal bv. 64 bit zijn nu, duh).

Maar als je altijd proper code en zaken als sizeof gebruikt (dus niet uitgaat van sizes) zal je in principe nooit in de problemen komen :).

Als je wat meer low-lev gaat zal je natuurlijk wel moeten opletten. maar dat zal wel niet in het begin :).
Een int is niet noodzakelijke 64 bits groot. Er bestaan verschillende implementaties, maar de meest gebruikte is LP64 waarbij:
char = 8 bits
short = 16 bits
int = 32 bits
long = 64 bits
pointer = 64 bits

Onder Windows daarentegen dacht ik dat zelfs een long ook 32 bit bleef.

De Single Unix Specification beschikt echter over de header inttypes (voornamelijk in C) die alternatieve integer types definieert, van uint8_t tot int64_t. Deze header is geen onderdeel van de standaard C definitie, maar wordt wel veel gebruikt en zit standaard in compilers als GCC, en heeft equivalenten onder Windows (__int64).

Je kan ook wat meer informatie vinden op deze website.

C en C++ definiëren echter geen vaste grootte voor dergelijke integer types, en zijn dus redelijk implementatie afhankelijk, hoewel de meeste implementaties dezelfde groottes gebruiken.

Trouwens, onder .NET is een int en een long ook gespecifieerd als een System.Int32 als ik me goed herinner, ongeacht het platform.

killgore

Legacy Member
Tyfius zei:
Een int is niet noodzakelijke 64 bits groot. Er bestaan verschillende implementaties, maar de meest gebruikte is LP64 waarbij:
char = 8 bits
short = 16 bits
int = 32 bits
long = 64 bits
pointer = 64 bits

Onder Windows daarentegen dacht ik dat zelfs een long ook 32 bit bleef.

De Single Unix Specification beschikt echter over de header inttypes (voornamelijk in C) die alternatieve integer types definieert, van uint8_t tot int64_t. Deze header is geen onderdeel van de standaard C definitie, maar wordt wel veel gebruikt en zit standaard in compilers als GCC, en heeft equivalenten onder Windows (__int64).

Je kan ook wat meer informatie vinden op deze website.

C en C++ definiëren echter geen vaste grootte voor dergelijke integer types, en zijn dus redelijk implementatie afhankelijk, hoewel de meeste implementaties dezelfde groottes gebruiken.

Trouwens, onder .NET is een int en een long ook gespecifieerd als een System.Int32 als ik me goed herinner, ongeacht het platform.

hm, weird, afaik werd int meestal geïmplementeerd als systeemwoord, wat in een 64 bit processor dus 64 bits zou zijn.

Ma kom, veel doet het er niet toe, en idd: c++ zelf legt niets op, daarom dat ik zei: gebruik sizeof en zo :).

Tyfius

Legacy Member
Bon, ik heb het hier even getest.

Linux (GCC):
Code:
int = 4
long = 8

Windows (MSVC++):
Code:
int = 4
long = 4
Een long onder Linux is dus niet per definitie portable naar Windows.

De limits header van VSC++ definieert hetvolgende:
Code:
#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */

#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
#define LONG_MAX      2147483647L   /* maximum (signed) long value */

#define LLONG_MAX     9223372036854775807i64       /* maximum signed long long int value */
#define LLONG_MIN   (-9223372036854775807i64 - 1)  /* minimum signed long long int value */

/* minimum signed 64 bit value */
#define _I64_MIN    (-9223372036854775807i64 - 1)
/* maximum signed 64 bit value */
#define _I64_MAX      9223372036854775807i64

Op onderstaande links staat nog wat informatie:
http://archive.opengroup.org/public/tech/aspen/lp64_wp.htm
http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size

Tyfius

Legacy Member
Het was eerder een algemene opmerking. Op 't werk kon ik een aantal systemen vergelijken en had ik wat meer info liggen daar ik een aantal maanden geleden mij wat dieper in deze materie had verdiept.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan