相关疑难解决方法(0)

C++中是否存在最大数组长度限制?

C++中的数组是否有最大长度?

它是C++限制还是取决于我的机器?它可以调整吗?它取决于数组的类型吗?

我可以以某种方式突破该限制,还是必须寻找更好的信息存储方式?什么应该是最简单的方法?

我要做的是在数组上存储long long int,我在Linux环境中工作.我的问题是:如果我需要存储N> 10位数的N长整数数组,我该怎么办?

我需要这个,因为我正在为学校编写一些加密算法(例如p-Pollard),然后点击这个整数墙和数组表示的长度.

c++ arrays

163
推荐指数
4
解决办法
24万
查看次数

在什么时候通常为C++中的局部变量分配内存?

我正在调试一个相当奇怪的堆栈溢出,据说是在堆栈上分配太大的变量引起的,我想澄清以下内容.

假设我有以下功能:

void function()
{
    char buffer[1 * 1024];
    if( condition ) {
       char buffer[1 * 1024];
       doSomething( buffer, sizeof( buffer ) );
    } else {
       char buffer[512 * 1024];
       doSomething( buffer, sizeof( buffer ) );
    }
 }
Run Code Online (Sandbox Code Playgroud)

我理解,它依赖于编译器,也取决于优化器决定什么,但为这些局部变量分配内存的典型策略是什么?

输入功能后是否会立即分配最坏情况(1 + 512千字节)或首先分配1千字节,然后根据条件另外分配1或512千字节?

c++ stack-overflow memory-management local-variables visual-c++

26
推荐指数
4
解决办法
1471
查看次数

自动存储持续时间的确切要求是什么?

根据编译器的不同代码:

int main()
{
   srand( 0 );
   if( rand() ) {
      char buffer[600 * 1024] = {};
      printf( buffer );
   } else {
      char buffer[500 * 1024] = {};
      printf( buffer );
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

当在最大堆栈大小等于1兆字节的系统上运行时,要么打印空字符串,要么在堆栈溢出时崩溃.

不同之处在于不同的编译器以不同方式分配自动存储.大多数编译器在函数start上为所有对象分配存储,因此在上面的代码中,它们分配600 + 400 = 1100千字节,这导致堆栈溢出.有些编译器更聪明,他们发现这两个数组永远不能同时访问,所以他们重用相同的内存,只分配600千字节,程序运行正常.

现在标准说(3.7/1)存储持续时间定义了存储的最小潜在寿命,然后(3.7.2/1)这些对象[具有自动持续时间]的存储持续到存在它们的块为止.

我不明白3.7/1和3.7.2/1是如何一起应用的.一个人说持续时间是最小的潜力,而另一个人明确表示持续到阻止存在.看起来根据第一种分配策略是合法的,但第二种要求只使用"重用"分配策略.

3.7/1和3.7.2/1如何共存?在最坏的情况下(第一个策略)分配比程序需要更多的内存是否合法?

c++ memory memory-management duration

12
推荐指数
2
解决办法
691
查看次数