Tenho duas estruturas T e K, e o tamanho de T é maior ou igual a K. Suponha o seguinte:
struct T {
k: K,
t_val: u32,
}
struct K {
k_val: u64,
}
Quero mapear Vec para Vec sem nenhuma nova alocação de heap. Isso deve ser possível de forma otimizada, já que o Vec mapeado definitivamente exigirá menos memória do que o Vec, pois T tem 12 bytes e K tem 8 bytes, e os tipos estão lá apenas para calcular o deslocamento. Aqui está como imagino que ficaria:
*ptr -> [12(T) | 12(T) | 12(T)]
|
iter_k
iter_t
*ptr -> [8(K) | 4(garbage) | 12(T) | 12(T)]
| |
iter_k iter_t
*ptr -> [8(K) | 8(K) | 8(garbage) | 12(T)]
| |
iter_k iter_t
*ptr -> [8(K) | 8(K) | 8(K) | 12(garbage)]
| |
iter_k iter_t
E os últimos 12 bytes de lixo são irrelevantes, pois o tamanho é 3 e pode permanecer como capacidade extra para o novo Vec.