Linux 内存管理

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

1. demo(将结构体指针指向一块 ’精心安排的‘ 内存区域,并打印该结构体成员变量
  • malloc 函数可以保证其返回的内存是地址对齐的(关于地址对齐),所以它可以被转换为任何类型的指针。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值