Tag: 堆栈

Java中的逃逸分析

据我所知,JVM使用逃逸分析进行一些性能优化,比如locking粗化和locking。 我感兴趣的是,如果JVM有可能决定使用转义分析可以在堆栈上分配任何特定的对象。 有些资源让我觉得我是对的。 有没有实际上这样做的JVM?

如何实现一个数组的3个堆栈?

有时,我遇到以下面试问题:如何实现一个数组的3个堆栈? 当然,任何静态分配都不是解决scheme。

如何在ac / c ++程序中检测可能/潜在的堆栈溢出问题?

有没有一个标准的方法来看看你的应用程序有多less堆栈空间,以及堆栈使用的最高水印是在运行期间? 另外在实际溢出的可怕情况下会发生什么? 它是否会崩溃,触发exception或信号? 在所有系统和编译器中是否有标准或不同? 我正在寻找Windows,Linux和Macintosh。

有堆栈地图框架的更好的解释吗?

我最近一直在研究Java虚拟机规范 ( Java Virtual Machine Specifications ,JVMS),以便更好地理解我的程序是如何工作的,但是我发现了一个我并没有得到的部分。 第4.7.4节描述了StackMapTable属性,在该节中,文档详细介绍了堆栈映射框架。 问题在于它有点罗嗦,我通过实例学习最好; 不通过阅读。 我明白,第一个堆栈映射框架是从方法描述符派生的,但是我不明白这是怎么解释的。另外,我并不完全理解堆栈映射框架在做什么。 我会假设它们与Java中的块相似,但看起来好像你不能在彼此内部有堆栈映射框架。 无论如何,我有两个具体的问题: 堆栈地图框架是做什么的? 第一个堆栈地图框架是如何创build的? 和一个一般的问题: 有人可以提供一个比JVMS更less罗嗦,更容易理解的解释吗?

如何确定最大的堆栈使用情况?

有哪些方法可用于确定embedded式/内存受限系统的最佳堆栈大小? 如果它太大,那么浪费的内存可能会在其他地方使用。 但是,如果它太小,那么我们得到这个网站的同名… 尝试跳跃式的开始:Jack Ganssle在“deviseembedded式系统的艺术”中指出: “凭借经验,学习计算堆栈的适当大小的标准和科学方法:随机挑选一个大小,并希望。 任何人都可以做得比这更好? 要求更具体的例子。 那么,如何使用IARembedded式工作台工具链,针对带有2 kB RAM的MSP430 MCU的C程序,无需操作系统? 该IDE可以在使用JTAGdebugging器时显示堆栈内容和使用情况。

GetEntryAssembly为Web应用程序

Assembly.GetEntryAssembly()不适用于Web应用程序。 但是…我真的需要这样的东西。 我使用一些在web和非web应用程序中使用的深度嵌套代码。 我目前的解决scheme是浏览StackTracefind第一个被调用的程序集。 /// <summary> /// Version of 'GetEntryAssembly' that works with web applications /// </summary> /// <returns>The entry assembly, or the first called assembly in a web application</returns> public static Assembly GetEntyAssembly() { // get the entry assembly var result = Assembly.GetEntryAssembly(); // if none (ex: web application) if (result == null) { […]

什么是微处理器中使用的堆栈指针?

我正在准备一个微处理器考试。 如果使用程序计数器来保存下一条指令的地址,那么堆栈指针的用法是什么?

为什么使用面向堆栈的语言?

我最近看了一下Factor ,关于使用基于堆栈概念的语言的想法非常有趣。 (这是我第一次遇到一个面向堆栈的语言)。但是,我没有看到这样一个范例的实际优势。 对我来说,这看起来更麻烦,而不是值得。 为什么我会使用诸如Factor或Forth之类的面向堆栈的语言? 我无视因素(原谅双关语),如工具和库的可用性。 我只是在问语言范式本身。

堆栈分配,填充和alignment

我一直试图深入了解编译器如何生成机器码,更具体地说,GCC如何处理堆栈。 为此,我一直在编写简单的C程序,将它们编译成程序集,并尽我所能了解结果。 这里有一个简单的程序和它生成的输出: asmtest.c : void main() { char buffer[5]; } asmtest.s : pushl %ebp movl %esp, %ebp subl $24, %esp leave ret 令我费解的是为什么24字节被分配给堆栈。 我知道,由于处理器如何处理内存,堆栈必须以4为增量进行分配,但如果是这种情况,我们应该只将堆栈指针移动8个字节,而不是24个。作为参考,缓冲区为17字节产生一个移动了40个字节的堆栈指针,并且根本没有任何缓冲区移动堆栈指针8.一个1到16字节的缓冲区移动了ESP 24个字节。 现在假定8个字节是一个必要的常量(它需要什么?),这意味着我们正在分配16个字节的块。 为什么编译器会这样调整呢? 我正在使用x86_64处理器,但是即使是64位字也只需要8字节的alignment方式。 为什么这个差距? 作为参考,我正在使用gcc 4.0.1运行10.5的Mac上进行编译,并且没有启用优化。

ServiceStack.Net Redis:存储相关对象与相关对象ID

我的团队决定通过ServiceStack.net Redis客户端与Redis合作,作为我们正在开发的一个新的高容量网站的底层存储库。 我真的不知道在哪里寻找这个问题的文档(对于一般的Redis文档或特定的ServiceStack.Net文档或两者兼而有之) – 实际上是否有关于如何通过ServiceStack.Net实现Redis的文档的权威来源所有你需要了解的有关Redis概念和ServiceStack.Net概念,还是我们需要分别从两个方面集成文档以全面了解? 我只是在想如何在模型的对象图中存储相关的对象。 以下是我想要处理的一个简单场景: 系统中有两个对象: User和Feed 。 在RDBMS术语中,这两个对象具有一对多的关系,也就是说,一个User拥有一个Feed对象的集合,一个Feed只能属于一个User 。 Feeds将始终通过其用户从Redis访问,但有时候我们希望通过Feed实例访问用户。 所以我的问题是我们是否应该将相关对象存储为属性,还是应该存储相关对象的Id值? 为了显示: 方法一 : public class User { public User() { Feeds = new List<Feed>(); } public int Id { get; set; } public List<Feed> Feeds { get; set; } // Other properties } public class Feed { public long Id { […]