Per molte attività di programmazione c'è spesso un compromesso tra velocità e memoria. Nel tuo caso, puoi probabilmente accelerare le cose se una delle dimensioni dell'array viene arrotondata alla successiva potenza maggiore di 2. Ciò diventa chiaro quando si utilizza una matrice monodimensionale per la memorizzazione e si esegue il calcolo dell'indirizzo da soli.
Per semplicità, supponiamo che vlan sia compreso nell'intervallo 0 ... 4094 e guardi questo esempio (pseudo codice):
Dat_t getContent(port,vlan)
{
return Content[port * MAXVLAN + vlan];
// or
return Content[vlan * MAXPORT + port];
}
Se MAXVLAN o MAXPORT è una potenza di due, la moltiplicazione è solo un'operazione di spostamento, che è tipicamente più veloce sulla maggior parte delle architetture di processore contemporanee rispetto a una moltiplicazione con un numero arbitrario. Quindi puoi scegliere MAXVLAN=4096
o MAXPORT=32
(e sprecare alcune voci nell'array), o MAXVLAN=4095
o MAXPORT=30
(che è efficiente in termini di memoria, ma spreca alcuni cicli della CPU). Quindi scegli la tua scelta.