c语言学习day05

struct s{

    char a;
    int b;
}

以上代码涉及到字节对齐问题,编译器为使cpu执行效率高,采取以空间换时间的方法,一次读取int的长度

结构体的变量定义顺序不同,size也不一样

e.g:
struct s1{
    char a;
    int b;
    short e;
}

struct s2{
    char a;
    short e;
    int b;
}

s1和s2的字节数就不一样,s2是8个,因为e是short型,可以占给a分配的多余的3个字节中的2个,

内存从低地址到高低址依次分布代码区、堆区、栈区、内核区,内核区通常我们编写的指针不能访问,低地址的起始部分是受保护区域,也不能访问,一旦访问,就会出现段错误

代码区可分为只读数据段、全局数据段(有初始值,无初始值)

局部变量前加上static,该局部变量就会放入全局数据段,只是局部有效(在大括号里有效),static局部变量不会随着函数的结束而被销毁

栈空间运行时才有,主要保存函数内部变量,函数一旦返回,对应栈的空间就被释放,生存周期比较短

堆空间运行时才有,可以自由管理分配和释放空间,生存周期由程序员决定,不由系统决定

只读数据段又称为静态段,程序结束时才释放内存,生存时间最长

void func(){
    unsigned char *p;
    p = (unsigned char *)malloc(100*sizeof(unsigned char));
    return;
}

 以上代码是典型的内存泄漏代码,p指向了一段堆空间,但函数一结束,p被释放了,但开辟的堆空间没有释放,需要free

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值