Kode berikut memberi saya kesalahan segmentasi ketika dijalankan pada mesin 2Gb, tetapi bekerja pada mesin 4GB.
int main()
{
int c[1000000];
cout << "done\n";
return 0;
}
Ukuran array hanya 4Mb. Apakah ada batasan ukuran array yang bisa digunakan di c ++?
c++
arrays
segmentation-fault
Mayank
sumber
sumber
Dalam C atau C ++ objek lokal biasanya dialokasikan di stack. Anda mengalokasikan array besar pada tumpukan, lebih dari yang bisa ditangani tumpukan, sehingga Anda mendapatkan aliran tumpukan .
Jangan mengalokasikannya secara lokal di stack, gunakan tempat lain sebagai gantinya. Ini dapat dicapai dengan membuat objek menjadi global atau mengalokasikannya di heap global . Variabel global baik-baik saja, jika Anda tidak menggunakan dari unit kompilasi lain. Untuk memastikan ini tidak terjadi secara tidak sengaja, tambahkan penentu penyimpanan statis, jika tidak, gunakan saja heap.
Ini akan mengalokasikan di segmen BSS, yang merupakan bagian dari heap:
Ini akan dialokasikan di segmen DATA, yang merupakan bagian dari heap juga:
Ini akan mengalokasikan di beberapa lokasi yang tidak ditentukan di heap:
sumber
delete
mana pun Anda mengalokasikannew
. Tetapi jika Anda yakin Anda mengalokasikan memori hanya sekali (seperti di main) itu sama sekali tidak diperlukan - memori dijamin akan dibebaskan saat keluar dari main bahkan tanpa eksplisitdelete
.Selain itu, jika Anda menjalankan sebagian besar sistem UNIX & Linux, Anda dapat meningkatkan ukuran tumpukan untuk sementara dengan perintah berikut:
Tetapi hati-hati, ingatan adalah sumber daya yang terbatas dan dengan kekuatan besar datanglah tanggung jawab yang besar :)
sumber
Array Anda sedang dialokasikan pada tumpukan dalam hal ini mencoba untuk mengalokasikan array dengan ukuran yang sama menggunakan alokasikan.
sumber
Karena Anda menyimpan array di stack. Anda harus menyimpannya di heap. Lihat tautan ini untuk memahami konsep heap dan tumpukan.
sumber