博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 内存管理
阅读量:4110 次
发布时间:2019-05-25

本文共 1274 字,大约阅读时间需要 4 分钟。

  • 竟然可以手动分配内存!想想还有点小激动。
  • 当内存块不再使用时一定要调用 free 函数释放内存
目录
  1. 内存操作函数(malloc / calloc / realloc / memcpy 等)( 头文件:‘ stdlib.h ’
  2. demo(malloc 函数,简单内存分配)

1. demo(将结构体指针指向一块 ’精心安排的‘ 内存区域,并打印该结构体成员变量
  • malloc 函数可以保证其返回的内存是地址对齐的(),所以它可以被转换为任何类型的指针。
#include 
#include
#include
struct data {
int i; char msg[13];};void main(){
char *da = malloc(20); char *pda = da; // 内存块初始化,写内存操作 // 我的机器为:小端字节序,所以 int 类型数据的低序字节写在内存低位 // 首先在前 4 个字节中以小端字节序写入十进制数值:1314,紧接着是字符串‘hello!\0’ *pda++ = 34; *pda++ = 5; *pda++ = 0; *pda++ = 0; *pda++ = 'h'; *pda++ = 'e'; *pda++ = 'l'; *pda++ = 'l'; *pda++ = 'o'; *pda++ = '!'; *pda = 0; // 字符串结尾 struct data *sd; sd = (struct data *)da; // 将前面分配的地址赋值给结构体 // 打印结构体中的 字符以及字符串 // 从地址块中,先按小端字节序读取 4 个字节作为成员变量 i 的值, // 接着继续读取余下的字节直至读到字符串末尾即:空字符 ‘\0’ 为止,作为成员变量 msg 的值, // 这里并没有什么类型检查之类的,而是按照结构体中成员变量声明的顺序在内存块中读取对应类型长度的字节, // 其中要注意 字节序问题,以及 C 语言中的字符串以空字符 ‘\0’ 作为结束标志 printf("i: %d, msg: %s\n", sd -> i, sd -> msg);}

运行结果(达到预期):

ubuntu@cuname:~/dev/beginning-linux-programming/test$ gcc -o test3 test3.cubuntu@cuname:~/dev/beginning-linux-programming/test$ ./test3i: 1314, msg: hello!		// 达到效果
  1. 上面程序代码中的字节序问题说明(使用 win 10 自带的计算器在 十进制 和 二进制 之间进行转换)
    字节序

转载地址:http://lclsi.baihongyu.com/

你可能感兴趣的文章
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>
杨辉三角
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
16、Memento 备忘录模式
查看>>