gpt4 book ai didi

c++ - 在 C 或 C++ 中是否使用未初始化的指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:31 26 4
gpt4 key购买 nike

this question 的评论之一中,有人指出默认情况下初始化 C++ 指针会破坏与 C 的兼容性。

这很好,但为什么这样的事情很重要?我认为唯一真正重要的是我是否出于某种原因想要一个未初始化的指针。但我想不出我想要它的原因。

未初始化的指针有什么用吗?还是兼容性问题仅仅是一种兼容行为(即不增加开销)而不是破坏代码?

最佳答案

这是一个非常专业的视频游戏优化案例(基本上是一个嵌入式系统)。我们过去常常将它们用于视频游戏中的就地加载数据行为,以加快加载速度(并避免碎片化)。

基本上,我们会在 PC cooker 中创建控制台端 (Playstation) 对象。然后为了减少碎片过载,我们将使用单个分配将数据对象打包在一个连续的缓冲区中。然后将更改对该缓冲区中数据对象的引用,以从指向偏移量的指针中减去基数(unfix 调用——我们还有一个虚拟的 fix/unfix 调用,它采用缓冲区基数并可以在偏移量和指针之间进行转换)。

当我们加载数据时,它加载了一个大块。根引用的所有数据都在根对象之外。我们可以在根上做一个 inplace “new”,为对象初始化正确的 VF 表并修复所有附加 block (通过 inplace new 然后分别修复附加 block )。

我们需要调用构造函数(就地新建)以在对象中生成适当的 VF 表。但是,如果指针在构造函数期间被自动清除为 NULL,我们就会丢失偏移量数据,并且无法在连续 block 内的对象之间重新创建指针。


FWIW,这是视频游戏世界中的一种常见技术。这Gamasutra article (不是我或我的同事写的)详细解释了他们在另一家公司所做的类似事情:

另外,这个话题讨论在SourceForge .

甚至有几次 GDC ( Game Developer Conference) 讨论了这个主题。

在 Google 上搜索“就地加载”会给出许多其他人使用这种基本上需要未初始化指针的技术的例子。


注意:目前,这是唯一通过给出必须保持未初始化的指针的特定用途来实际回答问题(“C 或 C++ 中未初始化的指针是否有用?”)的唯一响应。

所有其他响应都是 original question referenced 的更好答案(“[C++] 为什么默认情况下不使用 NULL 初始化指针?”)导致发布者提出这个问题。

关于c++ - 在 C 或 C++ 中是否使用未初始化的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com