![]() |
1
8
静态缓冲器的缺点:
静态缓冲器的优点:
|
![]() |
2
6
如果在vc++编译器中启用了/gs,则堆栈分配会稍微昂贵一些,因为它可以对缓冲区溢出进行安全检查(默认情况下启用了/gs)。实际上,您应该分析这两个选项,看看哪个更快。静态内存中的缓存位置与堆栈中的缓存位置可能会产生差异。 这是非静态版本,带有带有/o2的VC++编译器。
这是静态版本
|
![]() |
3
4
两者之间几乎没有任何速度差。在堆栈上分配缓冲区的速度非常快——它只是将堆栈指针递减一个值。但是,如果您在堆栈上分配一个非常大的缓冲区,则有可能溢出堆栈并导致segfault/访问冲突。相反,如果您有大量的静态缓冲区,那么您将大大增加程序的工作集大小,尽管如果您有良好的引用位置,这将有所减轻。 另一个主要区别是堆栈缓冲区是线程安全的和可重入的,而静态缓冲区既不是线程安全的也不是可重入的。 |
![]() |
4
2
您还可以考虑将代码放入类中。例如
如果每个胎面仅分配自己的发动机,这是胎面安全的。它避免在堆栈上分配大量内存。堆上的分配开销很小,但如果多次重用类的实例,则可以忽略不计。 |
![]() |
5
2
我是这里唯一一个使用多线程软件的人吗?在这种情况下,静态缓冲区是绝对不允许的,除非您希望将自己投入到大量的性能循环锁定和解锁中。 |
![]() |
6
0
正如其他人所说,堆栈分配速度非常快,对于更复杂的对象(如arraylist或hashtable(现在列表<>和字典<,>,在通用世界中)来说,不必每次重新分配的速度可能更快,因为在这些对象中,每次都有要运行的构造代码,而且如果容量设置不正确,那么yo每次容器达到容量时都会有不需要的重新分配,必须分配新内存,并将内容从旧内存复制到新内存。我经常会使用工作列表中允许增长到所需大小的对象,并通过调用clear()重新使用它们,这会使分配的内存/容量保持不变。但是,如果您有一个碰巧分配了大量不经常发生或只发生一次的内存的胭脂调用,那么应该小心内存泄漏。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 3 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |