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:
	
	| 12
 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