当前位置:  开发笔记 > 编程语言 > 正文

在调用之前确定realloc()行为

如何解决《在调用之前确定realloc()行为》经验,为你挑选了1个好方法。

据我了解,当被要求保留更大的内存块时,realloc()函数将执行以下三种不同的操作之一:

if free contiguous block exists
    grow current block
else if sufficient memory
    allocate new memory
    copy old memory to new
    free old memory
else
    return null

增长当前块是一个非常便宜的操作,所以这是我想利用的行为.但是,如果我正在重新分配内存,因为我想(例如)在现有字符串的开头插入一个char,我不希望realloc()复制内存.我最终会用realloc()复制整个字符串,然后再次手动复制它以释放第一个数组元素.

是否可以确定realloc()将执行哪些操作?如果是这样,是否有可能以跨平台的方式实现?



1> Rômulo Cecco..:

realloc()的行为可能取决于其具体实施.并且基于此代码将是一个可怕的黑客,至少可以说,违反了封装.

针对您的具体示例的更好解决方案是:

    找到当前缓冲区的大小

    分配一个新缓冲区(with malloc()),大于前一个缓冲区

    将所需的前缀复制到新缓冲区

    将前一个缓冲区中的字符串复制到新缓冲区,从前缀开始

    释放上一个缓冲区

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有