📜  为什么全局数组比局部数组大?

📅  最后修改于: 2022-05-13 01:54:46.435000             🧑  作者: Mango

为什么全局数组比局部数组大?

任何编程语言中的数组都是存储在连续内存位置的相似数据项的集合,可以使用数组索引随机访问元素。它可用于存储任何特定类型的原始数据类型的集合,例如intfloatdoublechar等。例如,C/C++ 中的数组可以存储派生的数据类型,例如结构体、指针等。下面是数组的表示。

大批

数组可以在程序中全局和本地(即在程序的特定范围内)声明和初始化。以下是更好地理解此概念的示例。

程序 1:下面是 C++ 程序,其中在本地声明了大小为10 7 的一维数组。

C++
// C++ program to declare the array
// of size 10^7 locally
#include 
using namespace std;
 
// Driver Code
int main()
{
    const int N = 1e7;
 
    // Initialize the array a[]
    int a[N];
    a[0] = 1;
 
    cout << a[0];
 
    return 0;
}


C++
// C++ program to declare the array
// of size 10^5 locally
#include 
using namespace std;
 
// Driver code
int main()
{
    const int N = 1e5;
 
    // Declare array a[]
    int a[N];
    a[0] = 1;
 
    cout << a[0];
 
    return 0;
}


Java
// Java program to declare the array
// of size 10^5 locally
import java.io.*;
 
class GFG{
 
// Driver code
public static void main(String[] arg)
{
    int N = 1;
     
    // Declare array a[]
    int a[] = {N};
    a[0] = 1;
     
    System.out.print(a[0]);
}
}
 
// This code is contributed by shivani


Python3
# Python program to declare the array
# of size 10^5 locally
# Driver code
N = 1e5
   
# Declare array a[]
a = [N]
a[0] = 1
print(a[0])
 
# This code is contributed by shivanisinghss2110


C#
// C# program to declare the array
// of size 10^5 locally
using System;
class GFG
{
 
// Driver code
public static void Main(String[] arg)
{
    int N = 1;
     
    // Declare array a[]
    int []a = {N};
    a[0] = 1;
     
    Console.Write(a[0]);
}
}
 
// This code is contributed by shivanisinghss2110


Javascript


C++
// C++ program to declare the array
// of size 10^7 globally
#include 
using namespace std;
 
// Variable N is initialized
const int N = 1e7;
 
// Global array is declared
int a[N];
 
// Driver Code
int main()
{
    a[0] = 1;
    cout << a[0];
 
    return 0;
}


Java
// Java program to declare the array
// of size 10^7 globally
import java.io.*;
  
class GFG
{
 
 
// Driver Code
public static void main(String[] arg)
{
    // Variable N is initialized
    int N = 1;
      
    // Global array is declared
    int a[] = {N};   
    a[0] = 1;
     
    System.out.print(a[0]);
      
}
}
// this code is contributed by shivani


Python3
# Python3 program to declare the array
# of size 10^7 globally
 
# Variable N is initialized
N = 1e7
 
# Global array is declared
a = [N]
 
# Driver Code
a[0] = 1
print(a[0])
 
# This code is contributed by shivanisinghss2110


C#
// C# program to declare the array
// of size 10^7 globally
using System;
  
class GFG
{
 
 
// Driver Code
public static void Main(String[] arg)
{
    // Variable N is initialized
    int N = 1;
      
    // Global array is declared
    int []a = {N};   
    a[0] = 1;
     
    Console.Write(a[0]);
      
}
}
// this code is contributed by shivanisinghss2110


Javascript


输出:

说明:在上面的程序中,当在本地声明一个一维数组时会发生分段错误错误,那么该数组大小的限制是10 5 的数量级。不能将数组的大小声明为超过10 5 。在此示例中,声明了大小为10 7的数组,因此发生了错误。

程序 2:下面是初始化大小为10 5的一维数组的程序:

C++

// C++ program to declare the array
// of size 10^5 locally
#include 
using namespace std;
 
// Driver code
int main()
{
    const int N = 1e5;
 
    // Declare array a[]
    int a[N];
    a[0] = 1;
 
    cout << a[0];
 
    return 0;
}

Java

// Java program to declare the array
// of size 10^5 locally
import java.io.*;
 
class GFG{
 
// Driver code
public static void main(String[] arg)
{
    int N = 1;
     
    // Declare array a[]
    int a[] = {N};
    a[0] = 1;
     
    System.out.print(a[0]);
}
}
 
// This code is contributed by shivani

蟒蛇3

# Python program to declare the array
# of size 10^5 locally
# Driver code
N = 1e5
   
# Declare array a[]
a = [N]
a[0] = 1
print(a[0])
 
# This code is contributed by shivanisinghss2110

C#

// C# program to declare the array
// of size 10^5 locally
using System;
class GFG
{
 
// Driver code
public static void Main(String[] arg)
{
    int N = 1;
     
    // Declare array a[]
    int []a = {N};
    a[0] = 1;
     
    Console.Write(a[0]);
}
}
 
// This code is contributed by shivanisinghss2110

Javascript


输出:
1

说明:在上面的程序中,代码编译成功,输出为1 。这是因为大小为10 5的一维数组在本地初始化并且这是有效的。

程序 3:以下是全局声明大小为10 7的一维数组的程序。

C++

// C++ program to declare the array
// of size 10^7 globally
#include 
using namespace std;
 
// Variable N is initialized
const int N = 1e7;
 
// Global array is declared
int a[N];
 
// Driver Code
int main()
{
    a[0] = 1;
    cout << a[0];
 
    return 0;
}

Java

// Java program to declare the array
// of size 10^7 globally
import java.io.*;
  
class GFG
{
 
 
// Driver Code
public static void main(String[] arg)
{
    // Variable N is initialized
    int N = 1;
      
    // Global array is declared
    int a[] = {N};   
    a[0] = 1;
     
    System.out.print(a[0]);
      
}
}
// this code is contributed by shivani

蟒蛇3

# Python3 program to declare the array
# of size 10^7 globally
 
# Variable N is initialized
N = 1e7
 
# Global array is declared
a = [N]
 
# Driver Code
a[0] = 1
print(a[0])
 
# This code is contributed by shivanisinghss2110

C#

// C# program to declare the array
// of size 10^7 globally
using System;
  
class GFG
{
 
 
// Driver Code
public static void Main(String[] arg)
{
    // Variable N is initialized
    int N = 1;
      
    // Global array is declared
    int []a = {N};   
    a[0] = 1;
     
    Console.Write(a[0]);
      
}
}
// this code is contributed by shivanisinghss2110

Javascript


输出:
1

说明:在上面的代码中编译成功,输出为1,这是因为全局声明了一个大小为107的一维数组,这是有效的。

注意:如果全局声明一个大小为10 8的一维数组,那么会再次遇到分段错误错误,因为一维数组的全局声明也是有限制的,即可以只声明全局一维数组,最多10 7 个大小。

为什么全局数组比局部数组大?

  • 当一个数组在本地声明时,它总是在堆栈内存中初始化,通常堆栈内存的大小限制在8 MB左右。这个大小可以根据不同的计算机体系结构而变化。
  • 当一个数组被全局声明时,它存储在数据段中,并且数据段没有大小限制。因此,当数组被声明为大尺寸(即大于10 7 )时,堆栈内存变满并导致堆栈溢出错误,因此,遇到分段错误错误。因此,为了声明更大的数组,最好全局声明它。
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程