¿Por qué la array global tiene un tamaño mayor que la array local?

Una array en cualquier lenguaje de programación es una colección de elementos de datos similares almacenados en ubicaciones de memoria contiguas y se puede acceder a los elementos aleatoriamente utilizando índices de array. Se puede usar para almacenar la colección de tipos de datos primitivos como int , float , double , char , etc. de cualquier tipo en particular. Por ejemplo, una array en C /C++ puede almacenar tipos de datos derivados como estructuras , punteros , etc. A continuación se muestra la representación de una array.

Array

Los arreglos pueden declararse e inicializarse tanto globalmente como localmente (es decir, en el ámbito particular del programa) en el programa. A continuación se muestran ejemplos para entender mejor este concepto.

Programa 1: a continuación se muestra el programa C++ donde se declara localmente una array 1D de tamaño 10 7 .

C++

// C++ program to declare the array
// of size 10^7 locally
#include <bits/stdc++.h>
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;
}

Producción:

Explicación: en el programa anterior, se produce un error de falla de segmentación cuando se declara localmente una array 1-D, entonces el límite del tamaño de esa array es del orden de 10 5 . No es posible declarar el tamaño de la array como más de 10 5 . En este ejemplo, se declara la array de tamaño 10 7 , por lo que se ha producido un error.

Programa 2: a continuación se muestra el programa donde se inicializa una array 1-D de tamaño 10 5 :

C++

// C++ program to declare the array
// of size 10^5 locally
#include <bits/stdc++.h>
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

<script>
 
// Javascript program to declare the array
// of size 10^5 locally
var N = 1;
 
// Declare array a[]
var a = [N];
a[0] = 1;
 
document.write(a[0]);
 
// This code is contributed by shivani
 
</script>
Producción: 

1

 

Explicación: en el programa anterior, la compilación del código es exitosa y el resultado es 1 . Esto se debe a que la array 1D de tamaño 10 5 se inicializa localmente y esto es válido.

Programa 3: A continuación se muestra el programa en el que se declara globalmente una array 1-D de tamaño 10 7 .

C++

// C++ program to declare the array
// of size 10^7 globally
#include <bits/stdc++.h>
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

<script>
 
// Javascript program to declare the array
// of size 10^7 globally
 
// Variable N is initialized
const N = 1e7;
 
// Global array is declared
let a = new Array(N);
 
// Driver Code
a[0] = 1;
document.write(a[0]);
 
// This code is contributed by gfgking.
</script>
Producción: 

1

 

Explicación: en el código anterior, la compilación es exitosa y el resultado es 1. Esto se debe a que una array 1-D de tamaño 107 se declara globalmente y esto es válido. 

Nota: Si una array 1-D de tamaño 10 8 se declara globalmente, nuevamente se encontrará el error de falla de segmentación porque también hay un límite para la declaración global de la array 1-D y es decir, solo es posible declarar una array 1-D globalmente hasta 10 7 tamaños.

¿Por qué la array global tiene un tamaño mayor que la array local?

  • Cuando una array se declara localmente, siempre se inicializa en la memoria de la pila y, en general, la memoria de la pila tiene un límite de tamaño de alrededor de 8 MB . Este tamaño puede variar según la arquitectura de la computadora .
  • Cuando una array se declara globalmente, se almacena en el segmento de datos y el segmento de datos no tiene límite de tamaño. Por lo tanto, cuando la array se declara de gran tamaño (es decir, más de 10 7 ), la memoria de la pila se llena y conduce al error de desbordamiento de la pila y, por lo tanto, se encuentra un error de falla de segmentación. Por lo tanto, para declarar la array de mayor tamaño, es una buena práctica declararla globalmente.

Publicación traducida automáticamente

Artículo escrito por chaitanyatekne5 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *