-
Yes,
charandbyteare pretty much the same. A byte is the smallest addressable amount of memory, and so is acharin C.charalways has size 1.From the spec, section 3.6 byte:
byte
addressable unit of data storage large enough to hold any member of the basic character set of the execution environment
And section 3.7.1 character:
character
single-byte character
<C> bit representation that fits in a byte -
A
charhasCHAR_BITbits. It could be any number (well, 8 or greater according to the spec), but is definitely most often 8. There are real machines with 16- and 32-bitchartypes, though.CHAR_BITis defined inlimits.h.From the spec, section 5.2.4.2.1 Sizes of integer types
<limits.h>:The values given below shall be replaced by constant expressions suitable for use in
#ifpreprocessing directives. Moreover, except forCHAR_BITandMB_LEN_MAX, the following shall be replaced by expressions that have the same type as would an expression that is an object of the corresponding type converted according to the integer promotions. Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.— number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT8 -
sizeof(char) == 1. Always.From the spec, section 6.5.3.4 The
sizeofoperator, paragraph 3:When applied to an operand that has type
char,unsigned char, orsigned char, (or a qualified version thereof) the result is 1. -
You can allocate as much memory as your system will let you allocate – there’s nothing in the standard that defines how much that might be. You could imagine, for example, a computer with a cloud-storage backed memory allocation system – your allocatable memory might be practically infinite.
Here’s the complete spec section 7.20.3.3 The
mallocfunction:Synopsis
1
#include <stdlib.h>
void *malloc(size_t size);Description
2 The
mallocfunction allocates space for an object whose size is specified bysizeand whose value is indeterminate.Returns
3 The
mallocfunction returns either a null pointer or a pointer to the allocated space.That’s the entirety of the specification, so there’s not really any limit you can rely on.