klopt helemaal.
Ik was inderdaad signedness even vergeten aangezien dat geen invloed heeft op de grote en de inhoud van een integer. En volgensmij is het niet perse 16 bits maar eerder 2 chars welke minimaal 8 bits elk moeten zijn.
Ah, C99 natuurlijk. Hoe heet de voorganger van de C++03 specificaties dan ook al weer? stamt toch ook uit 1999 ergens? en was long long ook niet geintroduceerd met C99 en daarom missend in de C++ spec?
Ik ben er toch vrij zeker van dat g++ onder 64bit linux met 64bit compilatie een 64bit int uitspuugt. Mischien dat windows nog ivm backwards compatibiliteit 32bits blijft maar voor g++ is het een optie om 32bit of 64bit executables te maken en de grote van de int veranderd mee. Ik heb dit zelf getest pas nog met SIZEOF(int).
Dat x86_64 een langere opcode gebruikte voor 64bit aritmetic wist ik niet maar dat is een compiler issue eigenlijk. Het zou wel eens intresant zijn te kijken of dat deze instructies ook werkelijk langzamer zijn aangezien met de echte 64bit processors, dus niet de netburst, ook de geheugen bandwijdte, registers en ALU's zijn verbreed. Dit was ook een van de redenen waarom de K8 sneller was, ook in de 32bit modus.
Ik denk echter dat als je je zorgen gaat maken over de grote van je opcodes dat je in de verkeerde taal bezig bent en beter meteen in assembly kunt gaan werken. En tja het kiezen van de juiste integer grote blijft lastig en des te meer reden om met een typedef te werken ipv hardcoded declaraties. Maarja dan moet je wel zinnige namen bedenken zodat de intentie en betekenis van het type duidelijk blijft. En ik krijg het idee dat je met 64bit integers altijd goed zit. Er is mischien een performance penalty maar een integer overflow kan onverwachte bugs creeren en is dus erger. Optimalizeren kan altijd nog dus met een typedef naar een long int of long long int zit je altijd goed wel goed en kan je er later zo nog een short int of zelf een char van maken zonder problemen.
De 8 bytes voor elke pointer is jammer inderdaad maar nou niet meteen een groot probleem. Je moet heel wat pointers hebben voordat je geheugen opraakt. Mischien zouden ze een short pointer kunnen introduceren? Of een soort dual pointer opcode zodat je 2 registers kunt laden uit elk de eerste 4GB geheugen in 1 tick?
Ik maak me meer zorgen over de geheugen latencies voor elke instructie dan de totale geheugen consumptie aangezien geheugen goedkoop is. Performance wordt bepaald door het aantal instructies dat je per seconde afwerkt niet de hoeveeldheid bytes die daarmee gemoeid zijn. PIO is zo 80s, SIMD en DMA is here