Entre les histoires d'alignement et celles de bookkeeping, new int() bouffera bien plus de quatre octets. Et encore plus en Debug, avec les gardes au début et à la fin de chaque zone allouée...
Voici un code testé sous Visual Studio 2010:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <iostream>
inline void * to_void(void * p) { return p; }
inline void const* to_void(void const* p) { return p; }
int main(void)
{
int *p1 = new int;
int *p2 = new int;
ptrdiff_t diff = reinterpret_cast<char*>(p2) - reinterpret_cast<char*>(p1);
std::cout << "p1: " << to_void(p1) << " - p2: " << to_void(p2) << " - diff: " << diff << " bytes" << std::endl;
delete p1, p1=NULL;
delete p2, p2=NULL;
return 0;
} |
p1: 001B1F30 - p2: 001B1F60 - diff: 48 bytes
p1: 00311EB0 - p2: 00311EC0 - diff: 16 bytes
Partager