2014-04-08 19 views

cevap

14

Dizinin genel olarak bildirilmesi, derleyicinin derlenmiş ikili öğenin veri bölümündeki diziye alan eklemesine neden olur. Bu durumda, ikili boyutu 8 MB (int başına 2000000 * 4 bayt) artırdınız. Bununla birlikte, bu, hafızanın her zaman mevcut olduğu ve yığına veya yığına tahsis edilmesine gerek olmadığı anlamına gelir.

DÜZENLEME: @Blue Ay haklı bir başlatılmamış dizi büyük olasılıkla bss veri segmentinde tahsis edilecek ve aslında hiçbir ek disk alanı kadar sürebileceğini belirtiyor. Bir başlangıç ​​ dizisi statik olarak tahsis edilecektir.

Programınızda büyük bir dizi bildirdiğinizde, muhtemelen programın yığın boyutunu aştınız (ve ironik olarak stack overflow neden oldu).

dinamik büyük bir dizi tahsis için daha iyi bir şekilde bu gibi bir yığın bellek, bir gösterici kullanmak ve tahsis etmektir:

using namespace std; 
int main() { 
    int *ar; 
    ar = malloc(2000000 * sizeof(int)); 

    if (ar != null) { 
    // Do something 
    free(ar); 
    } 

    return 0; 
} 

Memory Layout of C Programs can be found here üzerinde iyi bir öğretici.

+0

Ayrıca malloc'un başarılı olduğunu kontrol etmeyi unutmayın – dkrikun

+1

Visual Studio'da, bunu yığın maksimum boyutunu artırmak için kullanabilirsiniz: http://msdn.microsoft.com/en-us/library/tdkhxaks.aspx – dkrikun

+0

Her şey - nereye giderse - açık statik süresi olan globals ve nesneler bir uygulama detayıyken, tipik olarak başlatılmamış değişkenler .bss bölümüne gider ve ikili boyutu şişirmez. Ve [namespace std kullanarak; C++ 'da tedirgin edilir] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice). –

İlgili konular