如何声明具有 1000000 个元素的类 C++
how to declare class with 1000000 elements c++
我正在编写一个 c++ 代码,我需要声明一个有两个 elment 的类
class arr{
public:
long num;
string str;
};
现在我需要存储近 1000000 个此类的 elment(取决于用户输入的类对象数量可以在 1 <= n <= 1000000 的范围内警告对象动态创建为
#include <iostream>
#include<string>
using namespace std;
class arr{
public:
long i;
string str;
};
int main(){
long n,j,i;
cin>>n;
arr a[n];
....方案的其余部分
但是,如果 n 的值很大,那么 100000则程序挂起,但对于小于 100000 的值工作正常 我应该尝试用什么方法一次声明超过 100000 个对象,我尝试借助将 arra 分为两部分的 2D 数组解决问题
arr a[1000][1000];
但是这种方法对我不起作用
如果有人有任何想法,请帮助我解决这个问题提前致谢
只需使用std::vector
#include <iostream>
#include <vector>
int main(){
long n;
cin>>n;
std::vector<arr> a(n);
}
what approach should i try to declare more than 100000 objects?
heap
上声明它们而不是在stack
上声明它们,你在堆栈上声明 1000000 个对象,这太多了。小心,有堆栈限制:
C/C++ 程序的最大堆栈大小
为什么堆栈内存大小如此有限?
要在堆上声明它们,请使用:
arr *arr= new arr[n];
这与vector
用于初始化元素的机制相同。
以下是一些背景信息,说明为什么在堆栈上分配太大的对象会失败并出现分段错误,而堆栈上可能以许多小块分配相同数量的空间:
机制是,系统使用分配的少量内存来设置堆栈。此分配由无法访问的内存区域保护。每当程序访问这个无法访问的区域时,硬件都会向内核发出警报;内核分析情况,推断程序需要更多的堆栈内存,将堆栈增加几个内存页,并告诉硬件正常继续执行程序。
只要访问的地址足够靠近堆栈的顶部,这就可以完美地工作,这样内核就可以安全地假设应用程序确实想要绘制一个新的堆栈帧,而不是由于错误而访问一些随机内存位置。在您的情况下,限制似乎在 16 MiB 左右。
如果您的堆栈帧都不大于 16 MiB,您应该能够使用超过 16 MiB 的内存,因为这样限制将在许多小步骤中提高,并且系统不会认为您刚刚访问了一个随机位置。
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 如何声明具有 1000000 个元素的类 C++
- 如何声明具有 1000000 个元素的类 C++