Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475

    [C++] dimensioni delle variabili

    Scusate, ma nei sistemi a 64 bit le variabili non dovrebbero avere una dimensione "doppia" rispetto ai sistemi a 32 bit?

    Cioè, per un int 8 byte invece che 4, per uno short 4 byte invece che 2, un long 16 byte invece che 8 etc? O me lo sono sognato io?

    Perchè io ho ubuntu a 64 bit, ma ho visto usando sizeof che le variabili hanno le dimensioni dei sistemi a 32 bit...
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Stai usando un compilatore a 64 bit ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    A questo non avevo pensato. Uso gcc, che però è già incluso nell'installazione di ubuntu... non mi sono mai chiesto se fosse a 64 bit, immagino sia a 32.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se e' a 32 bit, naturalmente, il suo int è a 32 bit ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5

    Re: [C++] dimensioni delle variabili

    Originariamente inviato da Ippo343
    Scusate, ma nei sistemi a 64 bit le variabili non dovrebbero avere una dimensione "doppia" rispetto ai sistemi a 32 bit?
    Non necessariamente. Per questioni di compatibilità alcuni compilatori (come Microsoft Visual C++) cambiano solo le dimensioni dei puntatori (che sono l'unica cosa che sicuramente cambia passando dai 32 ai 64 bit) e definiscono un nuovo tipo (di solito long long o qualcosa del genere) per gli interi a 64 bit.
    Comunque g++ segue la politica per me più sensata, per cui mantiene i tipi fino all'int di dimensioni uguali, e cambia il long (che sulle piattaforme a 32 bit di solito è un intero a 32 bit uguale all'int normale) in un intero a 64 bit (8 byte). In questa maniera ottieni tutta la varietà di interi con i vari tipi forniti di default dal C++. Per verificare le dimensioni dei tipi comunque ho scritto un programmino estremamente semplice:
    codice:
    #include <iostream>
    
    #define PRINT_TYPE_SIZE(type) std::cout<<#type<<" size: "<<sizeof(type)<<" bytes"<<std::endl
    
    int main()
    {
    	PRINT_TYPE_SIZE(void *);
    	PRINT_TYPE_SIZE(short);
    	PRINT_TYPE_SIZE(int);
    	PRINT_TYPE_SIZE(long);
    	PRINT_TYPE_SIZE(long long);
    	PRINT_TYPE_SIZE(float);
    	PRINT_TYPE_SIZE(double);
    	PRINT_TYPE_SIZE(long double);
    	PRINT_TYPE_SIZE(char);
    	PRINT_TYPE_SIZE(wchar_t);
    	return 0;
    }
    Sulla mia macchina
    codice:
    matteo@teoubuntu:~/cpp$ uname -a
    Linux teoubuntu 2.6.28-14-generic #46-Ubuntu SMP Wed Jul 8 07:41:18 UTC 2009 x86_64 GNU/Linux
    matteo@teoubuntu:~/cpp$ g++ --version
    g++ (Ubuntu 4.3.3-5ubuntu4) 4.3.3
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    compilato così
    codice:
    matteo@teoubuntu:~/cpp$ g++ dimensione\ tipi.cpp -O1 -O2 -O3 -Wall -o dimensione\ tipi
    dà questi risultati:
    codice:
    matteo@teoubuntu:~/cpp$ ./dimensione\ tipi 
    void * size: 8 bytes
    short size: 2 bytes
    int size: 4 bytes
    long size: 8 bytes
    long long size: 8 bytes
    float size: 4 bytes
    double size: 8 bytes
    long double size: 16 bytes
    char size: 1 bytes
    wchar_t size: 4 bytes
    matteo@teoubuntu:~/cpp$
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.