在使用c++ 的placement new的时候,并不检查size的值,传入的指针可能指向的内存地址只有3字节,而你去执行new(charArray)int
居然也是可以执行成功的。
如果传入的指针式NULL,可定返回值也是NULL了。
这里主要是理解
placementnew 只是在你给的内存上做初始化。并不检查size。
所以如果你在给定的指针上初始化了别的位置的内存,麻烦比较大了吧。
顺便说一下在进程内 栈的增长方式
从上表中可以看出两个问题,
1> 栈的内存空间增长方式是向下增长的。后一变量的地址在数值上是见减小的。
2> 当一个变量的地址空间大于一个byte的时候,变量的地址空间为变量所占空间地址中最小的哪一个地址。也就是指针指向他的话,指向的是最小的那个地方。
3> 为变量分配地址的时候,32位机是按照变量地址必须可以除以变量的类型的
所以char 可以使用任意一个byte
char数组可以使用任意连续的地址。
int就必须使用首地址可以除以4的。(当然必须可以分配,这个对其原则就造成了内存碎片)
short则必须起始地址可以除以2
double 则必须可以除以8
以上数据是在centos测试的。32位系统。