Memory, Bits, & Bytes
Memory Part of the computer where programs and data are stored. Read and written (changed). Bit – Binary digit – Basic unit of memory – 1 or 0 – Why binary? Because we can most reliably (electronically) distinguish between 1 and 0. Byte = 8 bits – Smallest unit of memory that can be read or written.
Memory addresses Each individually addressable “cell” is an 8-bit byte containing 2 8 = 256 possible values (0..255). The number of memory cells is independent of the cell size. Most modern processors have at least a 32-bit address space = 4G bytes arranged
Representing strings Each byte will contain the ASCII value of a character.
Representing strings So “hello” is the sequence of bytes: But how do we determine the end of the string? – This method is also employed by C. – Other methods are possible.
Integers in memory Each individually addressable “cell” is an 8-bit byte containing 2 8 = 256 possible values (0..255). To allow for larger values, we group bytes together. – byte= 8 bits – word= 16 bits – double word= 32 bits (long word) – quadword= 64 bits
Byte ordering Consider a word consisting of 2 bytes in memory with a value of at address 10. It is a word (2 bytes) so it occupies memory location 10 and memory location 11. It can be stored in memory as either: M[10]M[11] big endian (Motorola) little endian (IA32, VAX) - either (switchable): IA64, ultraSparc
Endian-ness Extends from 4 to 8 (and 16) byte integers too. (Note: For integers larger than 2 bytes, other orderings are possible but they are not used.)
Endian-ness conversion 1.big endian: Motorola 2.little endian: IA32, VAX 3.bi-endian: IA64, ultraSparc – either/both supported – typically switchable at boot time
Endian-ness conversion What happens if one sends a message (that contains multi-byte integers) from one system to another across the internet, and they have different endian-ness? – We need a way to convert from one format to another (future topic; also see htonl Unix/Linux function).