内存管理
我 们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。
内存地址是以字节为单位的。
内存分区
栈区
内存申请和释放
- malloc
- free
- calloc
- realloc
void calloc(int num, int size);在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 numsize 个字节长度的内存空间,并且每个字节的值都是0。
void free(void *address);该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。
void *malloc(int num);在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
void realloc(void address, int newsize);该函数重新分配内存,把内存扩展到 newsize。
当程序退出时,操作系统会自动释放所有分配给程序的内存,但是,建议您在不需要内存时,都应该调用函数 free() 来释放内存。
内存对齐
https://www.cnblogs.com/wuyudong/p/memory-alignment.html
字节顺序/大小端
大端

小端

处理器体系
- x86、MOS Technology 6502、Z80、VAX、PDP-11等处理器为小端序;
- Motorola 6800、Motorola 68000、PowerPC 970、System/370、SPARC(除V9外)等处理器为大端序;
- ARM、PowerPC(除PowerPC 970外)、DEC Alpha、SPARC V9、MIPS、PA-RISC及IA64的字节序是可配置的。
网络序
网络传输一般采用大端序,也被称之为网络字节序,或网络序。IP协议中定义大端序为网络字节序。
Berkeley套接字定义了一组转换函数,用于16和32bit整数在网络序和本机字节序之间的转换。htonl,htons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。