当前位置:  技术问答>linux和unix

栈内存回收

    来源: 互联网  发布时间:2016-12-04

    本文导语:  i n t f1(int val) { int *ptr; if (val == 0) { int val; val = 5; ptr = &val; }/////////////2处 return (*ptr + 1); }/////////////////1处 1 4 0 U N I X环境高级编程 大家分析下这个题目 输出 6 是否说明栈空间在方法结束后才回收 在...

i n t f1(int val)
{
int *ptr;
if (val == 0) {
int val;
val = 5;
ptr = &val;
}/////////////2处
return (*ptr + 1);
}/////////////////1处
1 4 0 U N I X环境高级编程

大家分析下这个题目
输出 6 是否说明栈空间在方法结束后才回收 在括号外只是访问权限 消失 使用指针还是能访问到的

栈内存回收到底是一个function结束(1处) 还是括号结束(2处)以在if中的val变量为例

|
这个可能会因编译器而异,具体查看汇编指令了

如下一段代码
#include 
main()
{
int a;
printf("a=%pn", &a);
{
int b;
printf("b=%pn", &b);
int c;
printf("c=%pn", &c);
}
int d;
printf("d=%pn", &d);
}

在sun平台的运行结果:
a=ffbffac0
b=ffbffabc
c=ffbffab8
d=ffbffabc

可见,变量d复用了变量b的地址


而同样一段程序在aix平台的运行结果(没事):
a=2ff22590
b=2ff22598
c=2ff2259c
d=2ff22594


在suse linux的运行结果(没事):
a=0x7fff3adc29fc
b=0x7fff3adc29f4
c=0x7fff3adc29f0
d=0x7fff3adc29f8


在HP平台的运行结果(没事):
a=7b040af0
b=7b040af4
c=7b040af8
d=7b040afc

|
对啊 回收并不清理数据,只是解除变量跟内存之间的关系

|
这个和编译器有关。所以应用程序不管结果对还是不对都不应该那么用

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Vectors 成员 get_allocator():返回vector的内存分配器
  • 我的机器内存128 ,安装redhat9 后,可用内存很少了,如何节省内存呢?
  • C++ Vectors 成员 capacity():返回vector所能容纳的元素数量(在不重新分配内存的情况下)
  • 奇闻:Apache+Apache JServ 1.1.1+1G内存居然报内存不够,那位高友知道参数设置,把俺的1G内存都利用起来,感激不尽啊
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 怎样读取指定内存地址处指定长度的内存数据???(
  • C/C++内存池实现介绍及基本要求
  • 【操作系统虚拟内存和物理内存疑惑】
  • linux下free命令显示的内存使用情况分析
  • 请教一个关于内存分配的问题(系统和DMA共享一块物理内存空间)
  • c/c++内存堆分配和栈分配理解
  • Solaris下如何获得物理内存和虚拟内存的大小?
  • Ubuntu查看内存,进程相关命令介绍
  • 程序需要共享内存相当大,但是系统的内存有限
  • Linux 共享内存介绍及实现代码
  • 关于大于2G内存的使用.....按32位编译的进程怎么使用大于2G的内存?
  • Linux内存文件系统(ramdisk)的三种实现方式
  • redhat9内存使用率高达73%,怎么查看内存具体使用情况
  • Microsoft IE MSHTML内存破坏远程代码执行漏洞
  • 遇到奇怪的内存泄露问题,应用程序杀死内存无法释放!
  • Microsoft Internet Explorer内存破坏漏洞(CNVD-2013-13096)
  • 多个进程对系统V共享内存进行读写,怎样实现对共享内存部分进行加解锁?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3