Variable size/Set: Difference between revisions
m (→{{header|D}}: mistake, void also has sizeof property) |
m (<lang>) |
||
Line 3: | Line 3: | ||
=={{header|Ada}}== |
=={{header|Ada}}== |
||
<lang ada> |
|||
type Response is (Yes, No); -- Definition of an enumeration type with two values |
|||
for Response'Size use 1; -- Setting the size of Response to 1 bit, rather than the default single byte size |
|||
</lang> |
|||
=={{header|D}}== |
=={{header|D}}== |
||
In D, any variables of static array of zero length has a size of zero. But such data is useless, as no base type element can be accessed. |
In D, any variables of static array of zero length has a size of zero. But such data is useless, as no base type element can be accessed. |
||
<lang d> |
|||
typedef long[0] zeroLength ; |
|||
typedef long[0] zeroLength ; |
|||
⚫ | |||
</lang> |
|||
NOTE: a dynamic array variable's size is always 8 bytes, 4(32-bit) for length and 4 for a reference pointer of the actual storage somewhere in runtime memory.<br> |
NOTE: a dynamic array variable's size is always 8 bytes, 4(32-bit) for length and 4 for a reference pointer of the actual storage somewhere in runtime memory.<br> |
||
The proper candidates of minimum size variable are empty structure, 1-byte size data type variable (include <code>byte, ubyte, char and bool</code>), and void, they all occupy 1 byte. |
The proper candidates of minimum size variable are empty structure, 1-byte size data type variable (include <code>byte, ubyte, char and bool</code>), and void, they all occupy 1 byte. |
||
<lang d> |
|||
byte b ; |
|||
byte b ; |
|||
ubyte ub ; |
|||
char c ; |
|||
bool t ; |
|||
</lang> |
|||
<code>bool</code> is logically 1-bit size, but it actually occupy 1 byte.<br> |
<code>bool</code> is logically 1-bit size, but it actually occupy 1 byte.<br> |
||
<code>void</code> can't be declared alone, but <code>void.sizeof</code> gives 1.<br> |
<code>void</code> can't be declared alone, but <code>void.sizeof</code> gives 1.<br> |
||
An empty structure is logically zero size, but still occupy 1 byte. |
An empty structure is logically zero size, but still occupy 1 byte. |
||
<lang d> |
|||
struct Empty { } |
|||
⚫ | |||
writefln(Empty.sizeof) ; // print 1 |
|||
</lang> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
Revision as of 12:57, 31 January 2009
You are encouraged to solve this task according to the task description, using any language you may know.
Demonstrate how to specify the minimum size of a variable or a data type.
Ada
<lang ada> type Response is (Yes, No); -- Definition of an enumeration type with two values for Response'Size use 1; -- Setting the size of Response to 1 bit, rather than the default single byte size </lang>
D
In D, any variables of static array of zero length has a size of zero. But such data is useless, as no base type element can be accessed.
<lang d>
typedef long[0] zeroLength ;
writefln(zeroLength.sizeof) ; // print 0
</lang>
NOTE: a dynamic array variable's size is always 8 bytes, 4(32-bit) for length and 4 for a reference pointer of the actual storage somewhere in runtime memory.
The proper candidates of minimum size variable are empty structure, 1-byte size data type variable (include byte, ubyte, char and bool
), and void, they all occupy 1 byte.
<lang d>
byte b ;
ubyte ub ;
char c ;
bool t ;
</lang>
bool
is logically 1-bit size, but it actually occupy 1 byte.
void
can't be declared alone, but void.sizeof
gives 1.
An empty structure is logically zero size, but still occupy 1 byte.
<lang d>
struct Empty { }
writefln(Empty.sizeof) ; // print 1
</lang>
Perl
I suppose you could use vec() or similar to twiddle a single bit. The thing is, as soon as you store this in a variable, the SV (the underlying C implementation of the most simple data type) already takes a couple dozen of bytes.
In Perl, memory is readily and happily traded for expressiveness and ease of use.