In case you were wondering, here is the output of sizeof() and other things for an Arduino Nano. What's interesting (to me) is that while the Atmega328p is an 8-bit MCU, sizeof(int)==2 and sizeof(char *)==2. In other words, the compiler is treating it as a 16-bit processor.
Welcome to sizeof! sizeof(bool)=1 sizeof(char)=1 sizeof(int)=2 sizeof(short)=2 sizeof(long int)=4 sizeof(long long int)=8 sizeof(char*)=2 sizeof(String)=6 sizeof(int8_t)=1 sizeof(uint8_t)=1 sizeof(int16_t)=2 sizeof(uint16_t)=2 sizeof(int32_t)=4 sizeof(uint32_t)=4 sizeof(int64_t)=8 sizeof(uint64_t)=8 __INT_MAX__=7FFF __WINT_MAX__=FFFF SHRT_MAX=7FFF USHRT_MAX=FFFF INT_MAX=7FFF UINT_MAX=FFFF LONG_MAX=7FFFFFFF ULONG_MAX=FFFFFFFF
Here's the code that produces the above.
#include <avr/power.h>
#include <avr/sleep.h>
#include <limits.h>
#define SO( i ) Serial.print( "sizeof(" #i ")=" ); Serial.println( sizeof(i) )
#define Max( i ) Serial.print( #i "=" ); Serial.println( i, HEX )
void setup(void)
{
Serial.begin( 9600 );
Serial.println( "Welcome to sizeof!" );
SO( bool );
SO( char );
SO( int );
SO( short );
SO( long int );
SO( long long int );
SO( char* );
SO( String );
SO( int8_t );
SO( uint8_t );
SO( int16_t );
SO( uint16_t );
SO( int32_t );
SO( uint32_t );
SO( int64_t );
SO( uint64_t );
Max( __INT_MAX__ );
Max( __WINT_MAX__ );
Max( SHRT_MAX );
Max( USHRT_MAX );
Max( INT_MAX );
Max( UINT_MAX );
Max( LONG_MAX );
Max( ULONG_MAX );
#ifdef LLONG_MAX
Max( LLONG_MAX );
#endif
#ifdef ULLONG_MAX
Max( ULLONG_MAX );
#endif
/* Max( LONG_LONG_MAX );
Max( ULONG_LONG_MAX ); */
}
void loop(void)
{
delay(1000); // allow serial buffer to empty
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_mode(); // here the device is actually put to sleep!!
}