MSVC有自己的非标准函数_aligned_malloc
, _aligned_realloc
and _aligned_free
.
C++17和C11引入了(std::)aligned_alloc
,其结果可以是de分配有free
or realloc
. But realloc
不能用于实际re分配返回的内存aligned_alloc
,因为它不需要结盟参数,因此不能保证返回的指针将正确对齐。
我什至找不到任何可以在 Microsoft Windows / Visual C++ 以外的平台上重新分配对齐内存(保留其对齐方式)的非标准扩展。
是我找错了,还是确实没有_aligned_realloc
POSIX 和其他平台上的替代方案?
If so,
- Why?
- 在这些平台上可以用什么来代替?还有什么比打电话更好的吗
aligned_alloc
与新的对齐,然后做memcpy
and free
荷兰国际集团关于成功的旧指针?
虽然 POSIX(在大多数平台上往往充当最低公分母)没有aligned_realloc
,它确实有aligned_alloc
and memcpy
。因此你可以很容易地实现你自己的aligned_realloc
保证可以在使用这些的任何合理的 posix 兼容平台上工作。但是,请注意,没有 posix 标准方法来获取 a 的大小malloc
d 内存区域。你必须自己跟踪它。
编辑:有一点空闲时间,所以我将其扩展以回答最常见的批评
正如精明的评论者会指出的那样,我提出的是,而不是如何realloc
内部工作。
在引擎盖下,您的标准realloc
实现将尽最大努力避免执行上述的 mallocing 和 memcpying 行为并随后释放。在诉诸后备之前,它将尝试使用两种行为之一。
1) 如果新大小小于旧大小,它将调整内存大小,避免分配、复制或释放。
2)如果新大小大于旧大小,它将(简单来说)查看相邻是否有足够大小的空闲内存,如果有,它将吞噬该内存并就地调整大小。如果没有,它就会诉诸后备。
我提出了一种幼稚的方法,因为我认为大多数提出这个问题的人都不想实现自己的 malloc 实现。 (尽管我强烈建议出于教育目的这样做)
希望这能满足任何投诉!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)