问题标签 [heap-fragmentation]

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 投票
0 回答
18 浏览

uniqueidentifier - 堆表上频繁、高度碎片化的索引

我有一个带有非聚集索引的表(堆表),该索引经常变得高度碎片化。列 ID 中的数据来自 csv 文件中的数据(从中导入),之后该 ID 用于其他表关系以用于报告目的。该表每天多次从 csv 更新(插入数据)。我经常运行 INDEX REORGANIZATION 以减少碎片。

您是否还有其他想法可以帮助防止碎片化如此频繁地发生?

以下是该表的示例脚本:

CREATE TABLE [dbo].[MyTable](
[ID] uniqueidentifier NOT NULL, ``
[EventID] uniqueidentifier NOT NULL,
[AssemblyID] uniqueidentifier NOT NULL,
[TimeStamp] [smalldatetime] NOT NULL,
[IsTrue] [bit] NOT NULL ,
[IsExempt] [bit] NOT NULL CONSTRAINT [DF_IsExempt] DEFAULT ((0)),
CONSTRAINT [UQ_MyTable_ID] UNIQUE NONCLUSTERED ([ID] ) )
GO

0 投票
0 回答
10 浏览

memory-management - 返回索引的分配器的名称?

在 C 语言中malloc返回指向对象的指针。这会产生堆碎片问题。因此,如果我们使用返回某个indexaka id 的分配器,那么我们可以通过透明的对象重定位来消除碎片。我们可以使用methot访问对象get(index)

我需要标题,这种分配方法的名称。

0 投票
2 回答
62 浏览

c++ - C++ 放置类的新对齐方式(在 SAMD21 微控制器上)

我正在开发一个在 SAMD21 微控制器上运行的应用程序。对于那些不熟悉 SAMD21 的人,它包含一个 ARM Cortex-M0+ 处理器。我使用的特定型号有 32 kB 的 RAM。我的应用程序运行到了 32 kB 的限制,所以我一直致力于优化代码以使用内存。

我一直在进行的一项优化是减少堆碎片。例如,我可能有如下场景:

在上面的示例中,当实例化 时my_third_obj,内存分配器可能会尝试将其放置在最初由 使用的空位置my_obj。但是,如果my_third_obj不适合该位置,则内存分配器将简单地在堆顶部分配更多空间并移动堆指针。这会在原来的位置留下一个“洞” my_obj(稍后可能会被其他对象填充),但这会产生堆碎片。

在我的特定应用程序中,我已确定在任何时间点我都只需要一个 A、B 或 C 类的活动实例。正因为如此,我正在考虑创建一个内存块来保存任何这些类的当前实例,并简单地使内存块与最大的类一样大,以便它可以容纳任何类。这将减少堆碎片,因为内存中总会有一个特定的位置来分配这些特定的类。

这是我在想的一个简单示例:

我从来没有在我之前编写的代码中真正使用过placement new ,但我认为它在我目前的情况下会很有用。我的主要问题是:鉴于我已经列出的示例,我是否需要以任何方式更改代码来处理对齐问题?类 A、B 和 C 都有不同的成员变量和不同的大小。这段代码会“工作”,还是我需要做一些特别的事情来处理内存对齐?

谢谢!