c++ placement new 不检查size的值

17 篇文章 0 订阅

在使用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位系统。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值