O diciamo il seguente caso. Prima ArrayResize(arr, 10, 100); Poi ArrayCopy(arr, arr2, 0, 0, 20); La dimensione della memoria riservata per l'array sarà ridotta?
A proposito, il mio ragionamento su reserve_size non è del tutto corretto. Infatti, è solo un passo del cambiamento della riserva, ma non la riserva stessa. Cioè, probabilmente non è memorizzato da nessuna parte. Ma la dimensione totale della memoria allocata è nota. Vorremmo conoscerla in qualche modo, e idealmente gestirla direttamente.
E riformulerò il mio suggerimento su ArrayResize come segue: quando si specifica reserve_size=-1, la funzione non deve cambiare la dimensione della memoria allocata per l'array se il parametro size si trova in questo intervallo. Se size > capacità, il buffer crescerà naturalmente.
Cioè quando ArrayResize(arr, 0, 100) viene chiamato inizialmente, si verifica l'allocazione?
L'allocazione avviene solo se la dimensione dell'array cambia verso l'alto. In questo caso, la dimensione dell'array non cambia, perché era uguale a 0.
Come faccio a rimuovere un URL dalla lista di fiducia? Il testo di aiuto dice:"Per eliminare un indirizzo dalla lista di fiducia, selezionalo e premi il pulsante "Elimina"", ma non c'è un pulsante simile.
Non è così che funziona l'attuale 0?
In generale, c'è molta confusione lì, non possiamo sapere la dimensione reale della memoria allocata per l'array per controllarla e ottimizzarla.
Se ricordo bene la spiegazione, la dimensione della riserva non diminuisce anche se le viene dato esplicitamente un numero più piccolo.
Sbagliato. A giudicare dall'esempio dell'aiuto, 0 funziona effettivamente come 0 e quindi il suggerimento -1 ha molto senso.
E riformulerò il mio suggerimento su ArrayResize come segue: quando si specifica reserve_size=-1, la funzione non deve cambiare la dimensione della memoria allocata per l'array se il parametro size si trova in questo intervallo. Se size > capacità, il buffer crescerà naturalmente.
La logica per lavorare con le allocazioni (codice condizionale):
L'array ("inside") memorizza quanti elementi sono allocati nell'array.
La logica del lavoro con le allocazioni (codice condizionale):
Capisco, grazie. E all'inizio questa allocazione è uguale a -1, o no? Cioè alla chiamata iniziale di ArrayResize(arr, 0, 100) l'allocazione sarà?
Questo allocato all'inizio è uguale a -1, o no?
Cioè quando ArrayResize(arr, 0, 100) viene chiamato inizialmente, si verifica l'allocazione?
L'allocazione avviene solo se la dimensione dell'array cambia verso l'alto. In questo caso, la dimensione dell'array non cambia, perché era uguale a 0.
La differenza è che nel primo caso non c'è nessun errore :)