Linux学习心得一

最近跟着达内的视频学习了一下Linux内核相关的一些东西,之后每有一些学习心得便如下总结成一篇博客。


Linux学习心得一:

理解malloc的工作原理:

使用一个数据结构(链表)维护分配空间

链表的构成:分配的空间/上一个空间数据/下一个空间数据/管理分配空间大小的数据

malloc分配的空间不要越界访问,因为容易破坏后台链表的维护结构。会导致malloc/free/calloc/realloc不正常工作

 

内存空间与变量的关系:

1.内存分四个区

全局栈,局部栈,堆,代码区

2.各种变量对应存放区

3.堆栈是一种管理内存的数据结构

4.查看程序的内存地址:getpid()/proccat maps…

 

C++与C中的堆分配与删除函数的联系跟区别:

new malloc的关系:

new的实现使用的是malloc

区别:new使用malloc后,还会初始化空间。对于基本类型,直接初始化默认值,整数初始化为0。对于UDT类型,调用指定的构造器(或者默认构造器)。


deletefree区别:

delete也是使用free来完成删除的,但是delete会先调用析构器,再调用free


delete pdelete[] p区别:

delete pdelete[] p都会正确的释放p,但是前者只会调用一次析构函数,而后者会对[]的每一个对象都调用一次析构函数。


定位分配 new(),对应realloc函数

calloc对应new[]


函数调用tips:

1.函数在执行的时候,拥有自己的栈空间(临时栈);

2.C++成员函数执行时,有自己和对象的两个栈空间。函数的参数就在临时栈,如果传递实参,则用来初始化临时参数变量。

3.对于函数指针,多传递实参是不会使用的,所以函数还是会正确工作

4.指针传递和引用传递时,函数会创建一个临时栈,拷贝指针指向的地址,及变量地址,还是会产生指针地址的拷贝。两者区别是指针传递对值进行修改,需要对内存进行提取,即*操作,而引用传递自带提取操作。


不同函数调用方法(或者说函数导出方法)_stdcall, _cdecl, _fastcall(Linux中,用__attribute__((stdcall))表示)的区别:

1.决定函数参数的压栈顺序;

2.决定函数栈的清空方式;

3.决定函数的命名方式。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值