gpt4 book ai didi

delphi - 局部变量: are they always on the stack?

转载 作者:行者123 更新时间:2023-12-03 14:47:33 24 4
gpt4 key购买 nike

下面的过程中,数组会在栈上分配吗?

procedure One:
var
arr: array[0..1023] of byte;
begin
end;

堆栈中最大的项是多少?

访问堆栈上的变量和访问堆上的变量有速度差异吗?

最佳答案

In the following procedure, will the array be allocated on the stack?

是的,前提是局部变量不是由匿名方法捕获的。此类局部变量驻留在堆上。

What is the largest item that can go on the stack?

这取决于堆栈有多大、已经使用了多少堆栈、以及函数本身的调用使用了多少堆栈。堆栈的大小是固定的,在创建线程时确定。如果堆栈增长超过该大小,则会溢出。至少在 Windows 上,默认堆栈大小为 1MB,因此我不认为您会遇到 1KB 数组的问题,如此处所示。

Is there a speed difference between accessing variable on the stack and on the heap?

总的来说不是,但这又要看情况。堆栈上的变量可能更容易被频繁访问,因此可能更容易被缓存。但对于大小合适的对象,比如我们在这里看到的 1KB 数组,我不希望访问时间有任何差异。从底层内存架构来看,栈和堆没有区别,都是内存。

现在,性能差异在于分配。堆分配比堆栈分配更昂贵。特别是如果您有一个多线程应用程序,堆分配可能会成为瓶颈。特别是,默认的 Delphi 内存管理器在多线程使用中不能很好地扩展。

关于delphi - 局部变量: are they always on the stack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34992893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com