c – 当缓冲区缩小时,realloc是否保证到位?
有没有保证realloc()将总是收缩缓冲区就地?以下所示:
new_ptr = (data_type *) realloc(old_ptr,new_size * sizeof(data_type)); 将会给new_ptr == old_ptr if new_size< old_size(当然当new_size == 0时).这对我来说似乎是合理的,但是好的是,这个标准是否执行了. 我正在考虑重新分配非POD数据类型的数组,并且如果上述行为得到保证,则认为以下策略可能至少允许有效的“收缩”: if (new_size > old_size) { // malloc() a new buffer // use placement copy constructor to copy old objects over // free() old buffer } else if (new_size < old_size) { // explicit destruction of unneeded objects // realloc() buffer } 我希望即使数据类型具有自己的引用/指针或任何内容,就地“收缩”将是强大的 解决方法
没有.
而已.没有一个这样的“它可能在一些架构中工作”或“应该根据经验”.该标准清楚地表明,地址可能会改变,所以依靠这一点,没有更多. 在编码到标准方面:做或不要.没有“尝试”:-) 从c99:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |