我有这样的数组声明:
int a[];
Run Code Online (Sandbox Code Playgroud)
这a是一个原始int类型的数组.这个数组存储在哪里?它是存储在堆还是堆栈上?这是一个原始类型int,所有原始类型都不存储在堆上.
我对Stack vs Heap之间的内存分配基础感到困惑.根据标准定义(每个人都说的东西),所有值类型都将被分配到堆栈,参考类型将进入堆.
现在考虑以下示例:
class MyClass
{
int myInt = 0;
string myString = "Something";
}
class Program
{
static void Main(string[] args)
{
MyClass m = new MyClass();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,内存分配将如何在c#中发生?MyClass(即m)的对象是否会完全分配给堆?也就是说,int myInt和string myString既会去堆?
或者,该对象将分为两部分,并将分配给两个内存位置,即堆栈和堆?
在阅读有关汇编程序的文章时,我经常遇到人们在写文件时他们推送处理器的某个寄存器并稍后再次弹出它以恢复它之前的状态.
假设我定义了一些类:
class Pixel {
public:
Pixel(){ x=0; y=0;};
int x;
int y;
}
Run Code Online (Sandbox Code Playgroud)
然后使用它编写一些代码.我为什么要这样做?
Pixel p;
p.x = 2;
p.y = 5;
Run Code Online (Sandbox Code Playgroud)
来自Java世界我总是写:
Pixel* p = new Pixel();
p->x = 2;
p->y = 5;
Run Code Online (Sandbox Code Playgroud)
他们基本上做同样的事情,对吗?一个在堆栈上而另一个在堆上,所以我将在以后删除它.两者之间有什么根本区别吗?为什么我更喜欢一个呢?
我目前正在尝试理解堆栈是如何工作的,所以我决定自学一些汇编语言,我正在使用这本书:
http://savannah.nongnu.org/projects/pgubook/
我正在使用Gas并在Linux Mint上进行开发.
我有点困惑:
据我所知,堆栈只是一个数据结构.所以我假设如果我在汇编编码我必须自己实现堆栈.然而,这似乎并非如此,因为有像这样的命令
pushl
popl
Run Code Online (Sandbox Code Playgroud)
因此,当在x86架构的汇编中编码并使用Gas语法时:堆栈只是已经实现的数据结构吗?或者它实际上是在硬件级别实现的?或者是别的什么?其他芯片组的大多数汇编语言也已经实现了堆栈吗?
我知道这是一个愚蠢的问题,但实际上我很困惑.
如果我在C++应用程序中全局声明数据结构,它是否会消耗堆栈内存或堆内存?
例如
struct AAA
{
.../.../.
../../..
}arr[59652323];
Run Code Online (Sandbox Code Playgroud) 是否可以在Android中查看活动堆栈以进行调试?
我一遍又一遍地阅读定义,我仍然没有得到ARM中的SP和LR?我理解PC(它显示下一条指令的地址),SP和LR可能是相似的,但我只是不知道它是什么.请你帮助我好吗?
编辑:如果你能用例子来解释它,那就太棒了.
编辑:终于找出了LR的用途,仍然没有得到SP的用途.
我知道每个线程都有自己的stack.原始类型和引用保留在堆栈中,并且堆栈中没有任何对象.我的问题是:
Xms和 - Xmx)我在IE浏览器中特别得到了一些客户端Javascript堆栈溢出问题,这发生在第三方库中,它进行了一些函数调用,并且由于某种原因它们偶尔会因为它的低堆栈限制而在IE中制动.
然后我编写了一个小测试HTML来测试一些浏览器的堆栈大小限制,发现IE8实际上有一个小的堆栈限制,如果与运行在Windows 7操作系统,8Gb RAM的笔记本电脑上的FF 7或Chrome 14相比:
<html>
<body>
<!-- begin Script: -->
<script type="text/javascript">
function doSomething(){
var i = 3200;
doSomethingElse(i);
}
function doSomethingElse(i){
if (i == 0) return -1;
doSomethingElse(i-1);
}
doSomething();
</script>
<!-- END OF PAGE -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当值大约为3200时,IE引发堆栈溢出,如果与IE相比,Firefox和Chrome可以处理非常深的递归.
我想知道是否有办法将堆栈溢出异常与在IE或任何其他浏览器中运行时引发它的Javascript函数联系起来,如果它可以在堆栈中为堆栈跟踪提供堆栈中的函数链提出错误.