当新大小与旧大小相同时,realloc的行为

H_s*_*red 7 c memory realloc

我正在努力提高代码效率.我有这样的事情:

    typedef struct{
    ...
    }MAP;



    MAP* pPtr=NULL;
    MAP* pTemp=NULL;
    int iCount=0;
    while (!boolean){
    pTemp=(MAP*)realloc(pPtr,(iCount+1)*sizeof(MAP));
    if (pTemp==NULL){
    ...
    }
    pPtr=pTemp;
    ...
    iCount++;
    }
Run Code Online (Sandbox Code Playgroud)

内存正在动态分配.我想减少realloc调用,使代码更有效.我想知道如果新大小等于旧大小,realloc将如何表现.电话会被忽略吗?

Yu *_*Hao 8

它没有在标准C中指定.所有标准C保证是:新对象的内容应与解除分配之前的旧对象的内容相同,直到新旧尺寸中的较小者.

但是,如果您使用的是GNU libc,它会明确地说明返回相同的地址,请参阅此处了解详细信息.

如果您指定的新大小与旧大小相同,realloc则保证不更改任何内容并返回您提供的相同地址.

  • `realloc`由GNU`libc`提供,而不是由gcc提供,它只是编译器.在许多系统上,gcc与GNU libc以外的库一起使用. (2认同)