- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为 a previous answer to another question 的后续行动,我开始好奇堆分配是如何在循环中工作的。
以下面两种场景为例:
声明:
SomeList: TObjectList<TSomething>;
场景 1:
begin
for X := 1 to 10 do
SomeList[X].DoSomething;
end;
场景 2:
var
S: TSomething;
begin
for X:= 1 to 10 do begin
S:= SomeList[X];
S.DoSomething;
end;
end;
现在我很好奇堆分配在这两种情况下是如何工作的。场景1是在每次循环迭代中直接调用列表项,我想知道它是否会在每次循环迭代时添加到堆中并释放。另一方面,第二种情况显然有一个堆分配,只需声明一个局部变量即可。
我想知道哪种情况对堆分配执行更重的负载(作为导致性能问题的一个主要原因)?
最佳答案
Now what I'm curious about is how heap allocations work in either scenario.
您的示例中没有堆分配(除非 DoSomething()
在内部分配内存)。
Scenario 1 is directly calling the list item in each loop iteration
情况 2 也是如此。
I'm wondering if it adds to the heap and releases for each time the loop iterates.
没有任何东西被添加到堆中。
The second scenario on the other hand, obviously has one heap allocation, by simply declaring a local variable.
局部变量分配在栈,而不是堆。不过,变量可以指向堆上的内存。场景 2 中的 S
变量会起作用,因为 TObject
派生类始终分配在堆上。 S
只是堆栈上的一个局部变量,指向 TSomething
对象占用的堆内存。
What I'm wondering is which scenario performs the heavier load on heap allocation (as being one leading cause to performance issues)?
都不是,因为您的示例中没有堆分配。
关于delphi - 哪种情况下堆分配更轻/更重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107543/
我的页面包含一个带有 5 个选项卡的 tabcontainer。每个选项卡都包含多个 RadGrid,因为 RadGrid 比 ASP.NET gridview 重。我的页面滞后,即运行速度非常慢。我
我有一个 extjs >4 应用程序,它使用选项卡面板作为菜单。每个选项卡下都有内容(包括容器等的 View )。 我注意到 extjs 可以正确处理 DOM,并且不会渲染我的应用程序拥有的所有内容。
这个问题在这里已经有了答案: PyCharm running way slow (10 个答案) 关闭去年。 我非常喜欢 PyCharm 的想法并且很乐意使用它。但是,它容易消耗计算机的处理能力和滞
我有内核函数,它必须将从 pixelBuffer(ARFrame.capturedImage) 创建的 Y 和 CbCr 纹理转换为 RGB 纹理,就像在苹果指南中一样 https://develop
我问这个问题是因为我和我的同事对编码风格有争议,因为他更喜欢箭头函数声明: const sum = (a, b) => a + b; 我更喜欢旧式的独立函数声明: function sum(a, b)
有没有一种方法可以“更轻量”地使用 globalCompositeOperation,同时使用 source-atop? (又名打火机,但仅限于已经绘制了一些东西的地方。) 最佳答案 一次只能设置一项
我正在为企业网站寻找轻型文本富编辑器,比 tinymce 更轻,带有用于评论表单的基本按钮。重要的是编辑器也可以在 IE6 中工作。直到现在我都在尝试 cleditor 15KB,但是当按“输入”键时
我问这个问题是因为我和我的同事在编码风格上存在争议,因为他更喜欢箭头函数声明: const sum = (a, b) => a + b; 而且我更喜欢老式的独立函数声明: function sum(a
我想知道该代码是否: select(fd,..., NULL); 比那个消耗更少的CPU: struct timeval tv; tv.tv_sec = X; tv_tv_usec = Y; sele
我是一名优秀的程序员,十分优秀!