Data Representation - Specifying Minimum Size

From Rosetta Code

Jump to: navigation, search

Programming Task
This is a programming task. It lays out a problem which Rosetta Code users are encouraged to solve, using languages they know.

Code examples should be formatted along the lines of one of the existing prototypes.

Demonstrate how to specify the minimum size of a variable or a data type.

[edit] 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

[edit] 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.

typedef long[0] zeroLength ; 
writefln(zeroLength.sizeof) ; // print 0 

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.

byte b ;
ubyte ub ;
char c ;
bool t ;

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.

struct Empty { }
writefln(Empty.sizeof) ; // print 1

[edit] 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.

Personal tools