问题标签 [pointer-aliasing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1465 浏览

opengl - JOGL mipmaps 和纹理闪烁

我的 OpenGL 2 场景中有一面墙和一块砖纹理,无论我设置什么,它都会不断闪烁和闪烁。当我近距离放大(并且可以清楚地看到纹理)时,闪烁和闪烁停止。但是当我缩小并在场景中移动时,闪烁和闪烁非常明显。这是砖墙的纹理代码:

从我搜索的内容来看,这似乎是 mipmapping 解决的问题。但我的问题是,如何做到这一点?我是否必须为 2 尺寸图像的所有不同功能创建、加载和设置参数?谁能给我一个示例,使用不会闪烁和闪烁缩放和在场景中移动的 mipmap 加载和显示 JOGL2 纹理?

0 投票
5 回答
383 浏览

c++ - 在 C++ 中避免别名(例如,将容器的元素添加到自身时)的“正确”方法是什么?

刚刚了解到上面的代码可能非常危险。

(如果不是很明显为什么,你并不孤单......这对我来说也不明显。)

我的问题:

  1. 处理它的“标准”方式是什么?制作一个新变量然后立即将其分配给某个东西对我来说似乎有点奇怪。有没有更好的处理方法?

  2. 你如何训练自己注意这样的混叠问题?你在寻找什么模式?我不知道承认这种情况;当我了解 C 中的关键字时,我才了解了别名restrict,直到现在我才了解问题的真正含义。


编辑:

我很乐意接受答案,但问题的第 (2) 部分似乎没有得到回答。我想知道人们使用什么策略来定位他们编写的代码中的别名错误。

到目前为止,我提出的一种策略是避免为两个参数传递相同的值。(在这种情况下,一个参数是隐式的,一个是显式的。)

还有其他容易注意和注意的事情吗?

0 投票
4 回答
397 浏览

c++ - 防止两个对象内部出现混叠

我有一个与此类似的函数签名

在内部,矩阵类有一个float* data;表示m x n组件的。我想告诉编译器,a不要b给输出矩阵加上别名,这样它就不会做大量的加载存储。

我该怎么做呢?我知道我可以传入指向函数签名的指针并用__restrict(在 MSVC 中)标记指针,但我想保留通过引用传递的对象的习语,其中对象包含指向内存的指针。

我也知道这__restrict不适用于对象引用。

0 投票
1 回答
1523 浏览

c - 数组指针别名 - 未定义的行为?

以下代码是否调用未定义的行为(由于别名违规或其他原因)?

请注意,使用普通int *类型而不是指向数组的指针类型的相应代码将是完全合法的,因为ab将是指向同一类型的指针,因此允许彼此别名。

编辑:有趣的结果是,如果这实际上是一个别名违规,那么它似乎是一种在restrictC99 之前获得语义的 hackish 但有效的方法。如:

据推测,如果您需要访问每个地址的实际数组,您可以使用 SIZE_MAX-1 和 SIZE_MAX-2 等作为不同的大小。

0 投票
1 回答
9820 浏览

pointers - gcc C/C++ 假定没有指针别名

最近读到 fortran 在数值计算中比 c/c++ 快的主要原因是因为没有指针别名。

显然,使用restrictor__restrict__关键字允许根据具体情况来指示给定内存元素不存在指针别名。

icc 编译器显然有一个选项-fno-alias,它允许全局假设不存在别名。在 gcc 上有-fno-strict-aliasing,它仅适用于所有别名情况的子集。

在使用某些优化标志时,gcc 中是否存在选项,或者是否存在不假定别名的情况?

0 投票
3 回答
1300 浏览

c++ - 如何告诉 C 或 C++ 编译器指针没有别名

我有一个接收指针数组的函数,如下所示:

我想传达给编译器的是指针ptrs[i]不是彼此的别名,并且数组ptrs[i]不重叠。我该怎么做?我别有用心是鼓励自动矢量化。

__restrict__另外,有没有办法获得与a 的迭代器相同的效果std::vector

0 投票
2 回答
232 浏览

c++ - 什么是寄存器缓存,它与 const 变量有什么关系?

来自http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.14

即使语言不合法const_cast,避免在const成员函数调用中刷新寄存器缓存的唯一方法是解决别名问题(即证明没有const指向对象的非指针)。

什么是寄存器缓存,在const成员函数调用中刷新它是什么意思?

0 投票
2 回答
128 浏览

c++ - “指针不被任何其他指针别名”含义的持续时间是多少?

目前 Visual C++ 附带运行时,其中malloc()__declspec( restrict ).

MSDN 告诉编译器,这个修饰声明返回的指针malloc()不能被任何其他指针所别名。好的,两个后续调用malloc()确实返回了不同的指针。但是如果我打电话会发生什么

在这种情况下,两个指针可以指向同一个位置。这与不能被任何其他指针含义所别名有何关联__declspec( restrict )

0 投票
4 回答
2423 浏览

c - c中的嵌套结构和严格别名

请考虑以下代码:

这是法律代码还是违反了 C99 严格的别名规则?请解释为什么它是合法/非法的。

0 投票
5 回答
847 浏览

c++ - 这段代码是否颠覆了 C++ 类型系统?

我知道const在 C++ 中有一个方法意味着一个对象通过该方法是只读的,但它可能仍然会改变。

然而,这段代码显然是通过const引用(即通过const方法)改变了一个对象。

这段代码在 C++ 中合法吗?

如果是这样:它是否破坏const了类型系统的-ness?为什么/为什么不?

如果不是:为什么不呢?

注意 1:我已经对示例进行了一些编辑,因此答案可能是指较旧的示例。

编辑 2:显然你甚至不需要 C++11,所以我删除了那个依赖。

更新:

我已将 lambda 迁移到构造函数的初始化列表,因为这样做可以让我随后说const BreakConst bc;,这 - 因为bc 它本身现在是 const (而不仅仅是指针) - 似乎暗示(由 Stroustrupbc以任何方式修改构造后应该导致未定义的行为,即使构造函数和调用者在没有看到彼此的定义的情况下无法知道这一点。