问题标签 [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 投票
3 回答
937 浏览

c - 别名“const restrict”指针参数是否合法?

如果dot_product声明为

会用

根据 C99 标准,是“未定义”吗?

编辑

x是一个指针,当然是指向sizeof(float) * x_len内存字节的,x_lenunsigned。这个问题是关于别名的。

0 投票
2 回答
1285 浏览

c - 来自 6.5.2.3 结构和联合成员的 C 中严格别名规则的例外

引用 C99 标准:

6.5.2.3

5 为了简化联合的使用,我们做了一个特殊的保证:如果一个联合包含多个共享一个共同初始序列的结构(见下文),并且如果联合对象当前包含这些结构之一,则允许检查它们中的任何一个的公共初始部分在任何地方都可以看到完整类型的联合声明。如果对应的成员对于一个或多个初始成员的序列具有兼容的类型(并且对于位域,具有相同的宽度),则两个结构共享一个共同的初始序列。

这种情况有一个例子:

我添加了一些更改:

如您所见,我已将联合声明移到外部,因此它在 foo() 中可见。根据标准的评论,这应该使我的代码正确,但看起来严格的别名仍然会破坏 clang 3.4 和 gcc 4.8.2 的代码。

输出 -O0:

2

输出 -O2:

1

对于两个编译器。

所以我的问题是:

C 真的依赖联合声明来决定某些结构是否是严格别名规则的例外吗?还是 gcc/clang 都有错误?

这对我来说似乎真的很糟糕,因为即使函数和联合都在同一个头文件中声明,这并不能保证联合在函数体的翻译单元中是可见的。

0 投票
1 回答
97 浏览

java - 对象中的别名

运行函数 foo1 时,为什么这段代码的输出是: 15 30 5 而不是 15 15 5 ?

我知道对象 v 的指针现在指向对象 va1,所以代码行的输出: System.out.print(v.getI() + " "); 应该是 15。那为什么是 30 呢?

0 投票
0 回答
104 浏览

c++ - 指针别名和性能改进

快速提问(希望很清楚)。

有人告诉我,如果处理指针别名问题(总是从内存中重新加载值,因为编译器不确定指向的值没有被另一个指针更改),考虑速度时的性能可以大大提高。这可以通过使指针保持不变来解决,例如:

我的问题是如何在循环中为更大的数据数组实现此功能,例如:

0 投票
4 回答
3481 浏览

symfony - 无法覆盖 Symfony 2 请求中的 pathInfo

我正在尝试处理别名(友好网址),可能我做得不对。我想要做的是将'/blog/my-post-about-something'之类的网址转换为'/posts/23'。

我为 kernel.request 事件编写了一个监听器,它进行一些操作并修改原始请求

所有逻辑都正常工作并更新原始请求。问题是,即使我更改了“REQUEST_URI”,属性 $pathInfo 仍然保持不变并指向上一个路径,所以我不断收到 404 错误。

有什么方法可以完全覆盖 uri,还是我应该尝试以不同的方式解决问题?

这是监听器定义

此问题的相关链接:https ://github.com/symfony/symfony/issues/10478

0 投票
3 回答
805 浏览

c - 警告“取消引用类型双关指针将破坏严格别名规则”的后果

我已经完成了一些关于类似主题的查询以及一些与之相关的材料。但我的查询主要是为了了解以下代码的警告。我不想修复!我知道有两种方法,联合或使用memcpy

请注意以下要点
1. 这里涉及的类型转换都是 32 位的。(或者我错了吗?)
2. 两者都是局部变量。

编译器具体点:
1.代码应该是平台无关的,这是一个要求!
2. 我在 GCC 上编译,它按预期工作。(我可以将 int 重新解释为浮点数),这就是我忽略警告的原因。

我的问题
1. 在这种别名情况下编译器可以执行哪些优化?
2. 由于两者都占用相同的大小(如果不是,请纠正我)这种编译器优化的副作用是什么?
3. 我可以安全地忽略警告或关闭别名吗?
4. 如果编译器没有进行优化并且我的程序在我第一次编译后没有损坏?我可以安全地假设每次编译器都会以相同的方式运行(不进行优化)吗?
5. 别名是否也适用于 void * 类型转换?还是仅适用于标准类型转换(int、float 等...)?
6. 如果我禁用别名规则有什么影响?

编辑
1. 基于 R 和 Matt McNabb 的更正
2. 添加了新问题

0 投票
4 回答
1612 浏览

python - Python中的二维数组是否存在别名?

我知道列表别名是 Python 中的一个问题,但我无法找到解决方法。

即使我根本不更改 A 的值,当我返回 A 时,它仍然会被修改:

这个列表有别名吗?如果是这样,你如何修改二维数组的元素而不发生混叠?非常感谢<3。

0 投票
3 回答
350 浏览

c++ - 当我声明一个引用变量时堆栈会发生什么?C++

当我声明一个变量时,它将被分配到堆栈中某个内存索引处,对吗?

但是当我声明一个引用变量时,它将指向另一个变量的相同索引,因此不必在堆栈中分配新空间......

c++ 如何处理这种情况?

我的意思是,它有一个包含名称和索引之间关联的表?

编译器做所有的工作?

我希望清楚......如果有人有一些手册或东西,我会很高兴!

谢谢大家,如果我用不好的英语写了对不起!

0 投票
1 回答
216 浏览

java - Array Changes Not Showing Up in Main Method

This code is supposed to perform a "perfect shuffle" on a deck of cards. It represents the division of a deck into two decks and then the subsequent interleaving of them.
When I pass in an array and then print out the elements in the returned array, the elements are evidently shuffled. However, as the array in the perfectShuffle method is an alias of whatever array I pass into it, the original array back in the main method should also be "shuffled".
However, when I print out the array after performing the perfect shuffle method on it, the elements are not shuffled. When I check the same returned array, it is shuffled... I'm not sure why it isn't working. Could someone explain this to me?

0 投票
2 回答
44 浏览

c++ - 释放数组中的项目

如果它有一个对象,让我们调用它otypeo *a,*b;如果我将o两个数组分配给数组a和数组,b那么delete[] b如果我尝试访问 a 中的 o 或 o 会发生什么?例如: