如何处理以下代码中的内存分配错误
How can I handle memory allocation errors in the following code?
const unsigned long long TABLE_SIZE = (1ULL << 34);
class HashMap {
private:
HashEntry** table;
public:
HashMap() {
table = new HashEntry*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
};
编译时的上述代码引发以下异常:"在引发'std::bad_alloc'的实例后调用terminate"what((:std::bad_alloc",而下面的代码没有抛出错误或警告,并且编译正确。
const unsigned long long TABLE_SIZE = 65536;
class HashMap {
private:
HashEntry** table;
public:
HashMap() {
table = new HashEntry*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
};
我认为抛出"bad_alloc"异常是因为系统内存不足。我想知道如何绕过这个问题,让这个代码发挥作用。
根据指针的大小,您的第一个代码块请求128 GB的连续内存(我假设是64位地址,因为您甚至无法在32位地址空间中寻址那么多字节(。这是一种特定的方式,即使在您开始分配HashEntry
对象之前,也会导致系统内存不足!
幸运的是,哈希表通常需要更少的bucket:使用模%
运算符将哈希代码转换为有效bucket索引的实际范围,然后使用冲突解决算法来处理多个哈希值"映射"到同一bucket的情况。这种方法可以将可能的哈希值的大空间"折叠"到有效哈希索引的小空间中。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么示例代码访问IUnknown中已删除的内存
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 以下代码执行哪种内存分配(动态或静态)?
- 为什么以下C++代码中存在内存泄漏?
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 无法找出我的代码中的内存泄漏
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 带有 GDB 调试器的 VS 代码内存视图
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 如何防止使用 std::shared_ptr 的代码中的内存泄漏
- 这行代码中的内存是如何分配"int **v = new int*[n]; "的?
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 为什么 valgrind 报告两个内存分配,而我的代码只请求一个?
- 如何使用 gcc 通过命令行限制C++代码的内存使用量?
- std::array 模板实例会占用更多的代码内存吗?
- C++OpenMP代码内存泄漏
- 如何将常量放入代码内存中
- Bug在我的代码内存操作