进程的四大分段

在一个终端(ubuntu)上,在运行一个进程时(如./a.out),此时他会开辟一个空间。此空间被粗略的分为四个段。

如下图所示:(注意:常量属于代码段

将代码编译成二进制流文件,存放在代码段。在一个进程中,他的全局变量,静态变量以及常量全部存放在数据段。当一个函数运行时,在栈段会为它分配一个空间。main是一个入口函数,在开始运行时,会为它在栈段分配一个空间。在函数中,里面的局部变量会在函数中空间中,分配一个空间。如图所示。当调用指针时,它会指向相应段的空间。其实就是指针变量的值是相应空间的地址。当使用类似于malloc, new 等开辟空间的函数时,他开辟的是栈的空间。如上图所示,一个指针指向一个用malloc开辟的空间。因为malloc是一个函数,首先,因为malloc() 是一个函数,所以会在栈段开辟一个空间,用于malloc的运行。当malloc运行结束时,栈分配的空间会自动释放。当使用malloc函数开辟一个空间时,这个空间在堆中。因为是在为指针开辟的。所以指针指向这个空间。如上图所示。当这空间被释放时,此时这个指针没有空间所指向,之间放在地址已经不存在。此时,他就被称为野指针【野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。】。所以他需要赋空NULL,将指针的内容清空。

知识浅薄所写若有错误,希望多多指正。本文也许多不足的地方,也希望,各位大神可以来补充。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值