Pertanyaan Bagaimana mungkin laptop memiliki banyak memori? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Saya mengotak-atik panggilan malloc, dan saya bertanya-tanya berapa banyak memori yang bisa diberikan oleh OS saya. Saya mencoba:

int main() {
    char *String = 0;
    String = malloc (100000000000000); // This is 10^14
    if (String)
        printf ("Alloc success !\n");
    else
        printf ("Alloc failed !\n");
    return 0;
}

Dan ... Itu berhasil. 10 ^ 14 kira-kira 18 Terabyte. Apakah mungkin laptop memiliki begitu banyak memori? Jika itu tidak mungkin, bagaimana ini bisa dijelaskan?


5
2018-06-26 19:20


asal


Jawaban:


OS 64-bit dapat menghasilkan ruang alamat dalam jumlah besar. Apa yang akan membatasi itu?

Dukungan ruang alamat dengan memori fisik (RAM) hanya dilakukan bila diperlukan.

Semua malloc panggilan harus lakukan adalah mengembalikan alamat. Alamat itu tidak perlu merujuk ke memori fisik sampai Anda mencoba untuk membacanya atau menuliskannya.

Kelemahan dari perilaku ini adalah bahwa gagal malloc panggilan adalah biasanya satu-satunya kesempatan untuk memberi tahu Anda dengan baik bahwa Anda tidak dapat memiliki memori yang Anda minta. Setelah ini, tentang semua sistem dapat dilakukan adalah menghentikan proses ketika mencoba untuk menggunakan lebih banyak memori daripada sistem dapat kembali.

Implementasi Anda hampir pasti memberi Anda beberapa cara untuk mengendalikan perilaku ini baik di tingkat sistem, untuk setiap proses, atau keduanya.


7
2018-06-26 19:22