Qualcuno sarebbe così gentile da tradurre questa frase per qualcuno che ignora beatamente il codice non gestito e le complessità della gestione della memoria?Il buffer viene allocato da un heap condiviso per il processo con dimensioni di 64 KB?
La memoria per questo buffer è allocata da un heap condiviso per il processo con dimensione di 64 KB. La dimensione massima del buffer dipenderà dall'utilizzo dell'heap.
È presente in alcune dozzine di pagine MSDN, ad es. WriteConsole, ma non riesco a trovare alcuna API che calcoli la dimensione massima che tale array può essere prima di esplodere, empiricamente posso dire che è da qualche parte tra 61 e 62,5 KB (chiamando 64, 63, 62 ecc. Finché non smette di impostare DllImport
's SetLastError
). C'è qualcosa come GetTotalHeapSize
(se non è un const 64KB indipendente dalla versione di Windows, l'architettura della piattaforma, i valori predefiniti, ecc.) E qualcosa come GetCurrentHeapInUse
disponibile? Come si possono ottenere i byte massimi che posso passare a quello e ad altri metodi P/Invocati?
Ecco un sospetto. È molto probabile che l'heap si trovi su un limite di 64 km. In tal caso, chiama 'myptr = malloc (1)' e controlla il valore di 'myptr & 0xFFFF'. Sarà molto vicino alla quantità di spazio utilizzato - l'importo rimasto sarà di circa 64k meno quel numero. – Floris