我有一个C程序来检查机器堆栈是否在内存中增长或减少。
它是这样的:
#include void sub(int *a) { int b; if (&b > a) { printf("Stack grows up."); } else { printf("Stack grows down."); } } main () { int a; sub(&a); }
现在我想在Java中做同样的事情。 ?
没有写任何本机代码,任何人都知道一个解决方案
谢谢
如果您没有使用任何本机代码,那么我无法想象在纯Java代码中它可能重要的情况。 毕竟,Java堆栈可能在任何方向上分配,而不是严格连续的内存块(如机器堆栈)。
Java源代码编译为Java字节代码,这是一种在JVM上运行的类似汇编的语言。 JVM是一个虚拟机,因此在使用堆栈和堆栈的机器上,它看起来完全相同。
因此,无法知道特定机器堆栈是否从Java代码增长或减少。
这不能在Java代码中完成。 它也不能用C代码完成。 您发布的代码调用未定义的行为(&b > a)
。 根据标准,除非指针指向同一数组中的元素,否则比较两个指针的结果是未定义的。 该标准没有说明堆栈增长的方向或堆栈是否存在。
哇,你将无法从Java中的这些简单代码中获取任何有用的信息,至少不是我所知道的。
你所拥有的代码做了很多假设,即使在C中实际上也可能是也可能不是。 它取决于运行程序的平台和操作系统。
在Java中,您将完全依赖于JVM的寻址实现,因此无法做到这一点。
我的第一个答案是使用分析器。 您还可以使用提供的API(JVMTI)为此创建自己的性能分析代理。 它肯定比你的方法复杂得多,但你应该能够得到你需要的东西。
IBM的这个页面也可以提供帮助。
这几乎就是我在这个问题上的全部内容,我希望它会对你有所帮助
需要了解更多c/c++开发分享你怎么知道机器的堆栈是否在内存中增长或减少? (JAVA),也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享你怎么知道机器的堆栈是否在内存中增长或减少? (JAVA)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979803.html