小编Mik*_*ich的帖子

在程序变得低效之前,允许多少 new[] 和 delete[] 分配有限制吗?

我不确定以前是否有人问过这个问题,所以我会试一试。

我有用于加载大客户列表(20 万个客户)的代码。每个客户端都存储在一个(当前)固定大小的结构中,其中包含他的姓名、地址和电话号码,如下所示:

struct client {
    char name[80];
    char address[80];
    char phonenumber[80];
};
Run Code Online (Sandbox Code Playgroud)

如您所见,该结构的大小为 240 字节。因此,200k 客户端将占用 48MB 内存。显然,这种结构的优点是易于管理并为回收客户创建“免费列表”。但是,如果明天我需要加载 5M 客户端,那么这将增长到 1.2Gb 的 RAM。

现在,显然在大多数情况下,客户的姓名、地址和电话号码占用的空间远少于 80 个字节,因此我想到使用如下结构代替上述结构:

struct client {
    char *name;
    char *address;
    char *phonenumber;
};
Run Code Online (Sandbox Code Playgroud)

然后让 *name、*address 和 *phonenumber 指向以确切所需大小动态分配的结构,用于存储每个信息。

然而,我确实怀疑,随着更多客户端以这种方式加载,它会大大增加所需的 new[] 和 delete[] 分配的数量,我的问题是这是否会在某些时候损害性能,例如,如果我想突然删除 1M 客户端中的 500k 并用 350k 不同客户端替换它们?

我怀疑在我分配了 1M 个“可变长度”小缓冲区之后,如果我“删除”其中的许多缓冲区,然后想要创建新的分配来回收已删除的那些,是否会导致分配器的一些开销找到他们?

c++ memory

-2
推荐指数
1
解决办法
130
查看次数

标签 统计

c++ ×1

memory ×1