![]() |
1
5
在引擎盖下没有真正的区别-通常是默认的
至于“更贵的耻辱”,我的理论是:回到一天,每一个周期都计算在内,所花费的时间
为什么C++缺少
|
![]() |
2
2
通常,new和delete使用malloc()和free()进行内存分配/释放。无论如何,它们必须使用一些原语进行内存分配/释放-使用重载 新的 和 删除 可以比malloc()和free()更快的运算符(比如它可以是在固定大小对象的内存池中工作的函数)。通常,除非您已经实际完成了这样的重载,否则您将看不到以这些方式完成的内存分配成本的任何差异。 不允许重新分配,因为并非所有数据类型都允许在内存中移动-它们需要调用复制构造函数和析构函数才能正确移动。例如,您可能在数组中存储了一些图形节点结构。如果盲目移动它们,指向对象之间的指针将变为无效。 |
![]() |
3
1
“新建和删除操作成本高昂”—现在,您已经 听说过C++程序员说的。但是说真的,动态内存分配在两种语言中的开销是一样的。 |
![]() |
4
1
我不知道C“耻辱”,但调整大小的C++。可以使用Placement New自定义New的行为。 但为什么要这样做呢?让编译器制造商做他们最擅长的事情! |
![]() |
5
1
总的来说,传统上,C被用于资源受限的环境中,这不仅是因为它存在的时间更长,而且因为它被用于嵌入式应用程序。潜在的计算成本
当我说constructor时,我当然是指任何所需的初始化(填写vtables、设置初始化器等)。这可能使
|
![]() |
6
0
它们基本上使用相同的分配技术——当然,在大多数实现中,默认的C++运行时新不会比Maloc快得多。最大的区别之一是,你可以在C++中改写分配器,这样你就可以使用优化的分配器来优化你的预期内存行为——当然,你也可以在C中这样做,但是语法上有点麻烦。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 7 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 7 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 8 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 8 月前 |