我正在建立一个翻译,因为这次我的目标是原始速度,所以在这个(原始)情况下,每个时钟周期对我都很重要.
您是否有任何经验或信息两者更快:Vector或Array?重要的是我可以访问元素的速度(操作码接收),我不关心插入,分配,排序等.
我现在要把自己从窗户里拉出来说:
这对我来说似乎很合乎逻辑.使用向量,您可以获得阵列不存在的所有安全性和控制开销.
(为什么)我错了?
不,我不能忽视性能差异 - 即使它是如此之小 - 我已经优化并最小化执行操作码的VM的每个其他部分:)
显然,维基百科有关于该主题的大量信息,但我想确保我理解.从我可以告诉它的重要性来理解堆栈/堆关系真正了解内存泄漏?
所以这就是我(我想)的理解.更正是非常受欢迎的!
首次启动程序时,会分配一块内存,例如0x000到0xFFF.第一部分(比如0x000到0x011)是加载程序代码的代码/文本段.
+--------------+ 0x011
| Program Code |
+--------------+ 0x000
Run Code Online (Sandbox Code Playgroud)
然后你有堆栈(比如0x012到0x7ff)保存局部变量,它们被存储/检索FIFO.所以,如果你有类似的东西
char middleLetter(string word){
int len = word.length();
return word[len/2];
}
int main(){
int cool_number;
char letter;
letter = middleLetter("Words");
...
Run Code Online (Sandbox Code Playgroud)
然后你的变量将被分配在堆栈上,如下所示:
+-------------+ 0x7ff
| |
| |
| |
| ... |
| len |
| letter |
| cool_number |
+-------------+ 0x012
Run Code Online (Sandbox Code Playgroud)
当然,如果你在某处(使用malloc或new)分配内存,但从不释放它,那么你的堆可能看起来像这样,你现在有内存泄漏:
+-------------+ 0xfff
| |
| malloc(20) | 0xf64
| malloc(50) | 0xf32
| malloc(50) | 0xf00
| ... …Run Code Online (Sandbox Code Playgroud)