跳到主要内容

内存管理

我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 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

字节顺序/大小端

大端​

小端​

处理器体系​

网络序​

网络传输一般采用大端序,也被称之为网络字节序,或网络序。IP协议中定义大端序为网络字节序。

Berkeley套接字定义了一组转换函数,用于16和32bit整数在网络序和本机字节序之间的转换。htonl,htons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。