问题标签 [allocation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4986 浏览

malloc()/free() 的对齐限制

我读过的较早的 K&R(第 2 版)和其他 C 语言文本讨论了动态内存分配器的实现方式,malloc()并且free()通常还顺便提到了一些关于数据类型对齐限制的事情。显然,某些计算机硬件架构(CPU、寄存器和内存访问)限制了您如何存储和处理某些值类型。例如,可能要求 4 字节 ( long) 整数必须从四的倍数地址开始存储。

主要平台(英特尔和 AMD、SPARC、Alpha)对内存分配和内存访问施加了哪些限制(如果有),或者我可以安全地忽略在特定地址边界上对齐内存分配吗?

0 投票
2 回答
2308 浏览

是否可以跟踪分配/解除分配?

据我所知,这是不可能的,所以我真的只是希望有一个左字段未记录的分配挂钩函数。
我想要一种方法来跟踪像_CrtSetAllocHook中的分配,但是对于C#/.NET.
垃圾收集器/分配的唯一可见性似乎是GC.CollectionCount
任何人有任何其他.NET 内存魔力?

0 投票
15 回答
11051 浏览

VC++中未初始化的内存块

众所周知,Visual C++运行时用特殊的非零标记标记未初始化或刚刚释放的内存块。有没有办法完全禁用此行为而无需手动将所有未初始化的内存设置为零?它对我的有效非空检查造成了严重破坏,因为0xFEEEFEEE != 0.

嗯,也许我应该解释得更好一点。我创建并初始化一个变量(通过new),一切都很好。当我释放它(通过删除)时,它会将指针设置为0xFEEEFEEE而不是NULL. 当我插入适当的检查时NULL,就像所有管理自己内存的好程序都应该做的那样,我会遇到问题,因为0xFEEEFEEE检查NULL没有问题。除了在删除它们时手动设置所有指针之外,还有什么好方法NULL可以检测内存何时已被释放?我宁愿不使用Boost仅仅是因为我不想要开销,尽管它可能很小,因为这是我使用 Boost 的唯一目的。

0 投票
8 回答
14025 浏览

C/C++ 的多线程内存分配器

我目前有大量的多线程服务器应用程序,我正在四处寻找一个好的多线程内存分配器。

到目前为止,我在:

  • 孙梅
  • 谷歌的 tcmalloc
  • 英特尔的线程构建块分配器
  • 埃默里·伯杰的宝藏

根据我的发现,hoard 可能是最快的,但我在今天之前没有听说过它,所以我怀疑它是否真的像看起来那么好。任何人都有尝试这些分配器的个人经验吗?

0 投票
8 回答
7330 浏览

什么是嵌入式系统的好 C 内存分配器?

我有一个单线程的嵌入式应用程序,它分配和释放大量的小块(32-64b)。基于缓存的分配器的完美场景。虽然我可以尝试编写一个,但它可能会浪费时间,并且没有像已经在前线的一些解决方案那样经过测试和调整。

那么我可以在这种情况下使用的最佳分配器是什么?

注意:我在系统中使用 Lua 虚拟机(这是 80% 以上分配的罪魁祸首),所以我不能轻易地重构我的代码以使用堆栈分配来提高分配性能。

0 投票
3 回答
647 浏览

与默认的 4KB 相比,16KB 或 32KB 的 NTFS 分配块是否会使编译时间更快?

与默认的 4KB 相比,16KB 或 32KB 的 NTFS 分配块是否会使编译时间更快?

0 投票
5 回答
1584 浏览

简单的效率问题 C++(内存分配)..也许一些碰撞检测有帮助?

我正在用 C++(一个多向 2d 空间射击游戏)编写一个类似街机的小游戏,我正在完成碰撞检测部分。

这是我组织它的方式(我只是编造它,所以它可能是一个糟糕的系统):

每艘船都由圆形组件组成——每艘船中组件的数量是任意的(更多的组件,更多的 CPU 周期)。我有一个 maxComponent 距离,我在创建船时计算它,这基本上是我可以从船中心到最远组件边缘绘制的最长线。我跟踪屏幕上的东西并使用这个 maxComponentDistance 来查看它们是否足够接近以发生碰撞。

如果它们距离很近,我会开始检查不同船只的组件是否相交。这就是我的效率问题所在。

我有一个组件相对于船中心的 (x,y) 位置,但它没有考虑船当前的旋转方式。我保持它们是相对的,因为我不想在每次船移动时都重新计算组件。所以我有一个旋转计算的小公式,我返回一个二维向量,对应于相对于船舶中心的旋转考虑位置。

碰撞检测在 GameEngine 中,它使用 2d 向量。我的问题是关于返回类型。我应该在每次调用该函数时创建并返回一个二维向量对象,还是应该为该组件对象提供一个额外的私有二维向量变量,在调用函数时编辑私有变量,并返回指向该对象的指针?

我不确定内存分配与永久、可编辑、私有变量的效率。我知道也必须为私有变量分配内存,但不是每次检查冲突时,只有在创建新组件时。组件在我的环境中不是恒定的,因为它们在船被摧毁时被删除。

这是我的主要困境。我也很感激任何关于我的实际碰撞检测系统设计的指针。这是我第一次破解它(也许应该读一下)

提前致谢。

0 投票
11 回答
26565 浏览

堆上的 C++ 多维数组

我将如何动态分配多维数组?

0 投票
4 回答
1077 浏览

正确的内存分配

我有以下结构:

但我不知道如何为此分配内存。我试过:

为了为 101 个条目创建一个哈希表,但它不起作用!谁能帮我?我真的很感激!

0 投票
7 回答
44597 浏览

C中动态分配数组的数组

我并不真正了解 C 中的一些基本内容,例如动态分配数组。我知道你可以这样做:

为了声明一个二维数组(随后将使用一些 *alloc 函数分配)。也可以通过做“轻松”访问它*(*(m + line) + column)。但是我应该如何为该数组中的元素赋值呢?使用 gcc 以下语句m[line][column] = 12;因分段错误而失败。

任何文章/文档将不胜感激。:-)