Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Intero massimo utilizzabile

    Qual'è l'intero massimo utilizzabile in un programma con riferimento al seguente script in java?

    codice:
    // Improved Stack class that uses the length array member.
    class Stack {
      private int stck[];
      private int tos;
    
      // allocate and initialize stack
      Stack(int size) {
        stck = new int[size];
        tos = -1;
      }
    
      // Push an item onto the stack
      void push(int item) {
        if(tos==stck.length-1) // use length member 
          System.out.println("Stack is full.");
        else 
          stck[++tos] = item;
      }
    
      // Pop an item from the stack
      int pop() {
        if(tos < 0) {
          System.out.println("Stack underflow.");
          return 0;
        }
        else 
          return stck[tos--];
      }
    }
    class Esempio {
    	  public static void main(String args[]) {
    	    int x=2_147_483_647;
    	    Stack mystack1 = new Stack(5);
    	    Stack mystack2 = new Stack(x);
    
    	    // push some numbers onto the stack
    	    for(int i=0; i<5; i++) mystack1.push(i);
    	    for(int i=0; i<x; i++) mystack2.push(i);
    
    	    // pop those numbers off the stack
    	    System.out.println("Stack in mystack1:");
    	    for(int i=0; i<5; i++) 
    	       System.out.println(mystack1.pop());
    
    	    System.out.println("Stack in mystack2:");
    	    for(int i=0; i<x; i++) 
    	       System.out.println(mystack2.pop());
    	  }
    	}
    Perché non posso scrivere int x=2_147_483_647; ?

  2. #2
    In Java int è un intero con segno a 32 bit in complemento a due, per cui il suo range è [-2^31, 2^31-1] - quindi, il massimo è quindi 2147483647 (ovviamente se lo scrivi con gli underscore non funziona).

    In ogni caso, cercare di allocare un array di quelle dimensioni può essere un problema, dato che vorrebbe dire allocare circa 2^31*4=2^33=8 GB di memoria contigua (e, anche ammesso che ci sia abbastanza memoria fisica, sui sistemi a 32 bit lo spazio di indirizzi non è grande a sufficienza).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973

    Re: Intero massimo utilizzabile

    Originariamente inviato da peruzzo
    Perché non posso scrivere int x=2_147_483_647; ?
    Perché non é valida come sintassi

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: Intero massimo utilizzabile

    Originariamente inviato da neroux
    Perché non é valida come sintassi
    In Java 7 si può fare
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973

    Re: Re: Re: Intero massimo utilizzabile

    Originariamente inviato da Alex'87
    In Java 7 si può fare
    mon dieu, vero ....

    http://stackoverflow.com/questions/6...meric-literals
    sono impazziti

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  6. #6

    Re: Re: Re: Re: Intero massimo utilizzabile

    Originariamente inviato da neroux
    sono impazziti


    (anche se... in C++11 si possono definire dei literal completamente arbitrari, e in alcuni casi possono essere completamente "smontati" a compile time via metaprogrammazione template)
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Originariamente inviato da MItaly
    In Java int è un intero con segno a 32 bit in complemento a due, per cui il suo range è [-2^31, 2^31-1] - quindi, il massimo è quindi 2147483647 (ovviamente se lo scrivi con gli underscore non funziona).

    In ogni caso, cercare di allocare un array di quelle dimensioni può essere un problema, dato che vorrebbe dire allocare circa 2^31*4=2^33=8 GB di memoria contigua (e, anche ammesso che ci sia abbastanza memoria fisica, sui sistemi a 32 bit lo spazio di indirizzi non è grande a sufficienza).
    Non capisco il calcolo che fai:
    2^31*4=2^33=8 GB
    potresti spiegarmi?
    Io ho Win 8 Enterprise a 64 bit con 4 gb di ram e lavoro su Eclipse.
    Su java 1.7 il segno _ è ammesso e a differenza di altri forumisti penso che sia una bellissima funzione.
    Conclusione: Per far girare il programma dovrei avere 8GB di ram?

  8. #8
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Ammetto che non ho letto tutto il codice ma in ogni caso tenteresti di allocare 2GB che sia probabilmente troppo secondo le impostazioni. Non sarebbe stato male postare l'errore che ottieni

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  9. #9
    Originariamente inviato da peruzzo
    Non capisco il calcolo che fai:
    2^31*4=2^33=8 GB
    potresti spiegarmi?
    2_147_483_647 è 2^31-1
    4 è il numero di byte per ciascun int.
    2^31*4=2^31*2^2=2^33 (per le proprietà delle potenze)
    1 GB = 2^30 B, quindi 2^33 B = 2^30 * 2^3 B = 2^3 GB = 8 GB.
    Conclusione: Per far girare il programma dovrei avere 8GB di ram?
    Almeno 8 GB tra RAM e file di swap e uno spazio di indirizzi con 8 GB di indirizzi liberi contigui (cosa che si dà nel caso di sistema operativo e Java a 64 bit, ma non nel caso di Java a 32 bit).
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Originariamente inviato da MItaly
    2_147_483_647 è 2^31-1
    4 è il numero di byte per ciascun int.
    2^31*4=2^31*2^2=2^33 (per le proprietà delle potenze)
    1 GB = 2^30 B, quindi 2^33 B = 2^30 * 2^3 B = 2^3 GB = 8 GB.


    che imbarazzo, come ho fatto a non considerare due millardi a 4 byte

    sì, ovviamente sarebbero 8 GB




    Originariamente inviato da MItaly
    Almeno 8 GB tra RAM e file di swap e uno spazio di indirizzi con 8 GB di indirizzi liberi contigui (cosa che si dà nel caso di sistema operativo e Java a 64 bit, ma non nel caso di Java a 32 bit).
    8 solo per questo array, in più memoria per il proprio programma, Java e il s.o. - saremmo piuttosto verso 10 come minimo su 64 bit ovviamente

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.