Насколько я знаю, если два указателя (или ссылки) не набирают псевдонимы друг друга, для компилятора является законным делать предположение, что они адресуют разные местоположения и делают определенные оптимизации, например инструкции по переупорядочению. Следовательно, наличие указателей на разные типы с одинаковым значением может быть проблематичным. Однако, я думаю, эта проблема применима только тогда, когда два указателя передаются в функции. Внутри тела функции, в которой создаются два указателя, компилятор должен иметь возможность убедиться в том, что отношения между ними касаются того, адресуются ли они одному и тому же месту. Я прав?Существует ли проблема с псевдонимом типа, когда указатели передаются в функции как аргументы?
ответ
Насколько я знаю, когда два указателя (или ссылки) не псевдоним типа друг друга, это законно для компилятора сделать предположение , что они обращаются в разных местах и сделать определенные оптимизаций например, инструкции по переупорядочению.
Исправить. GCC, например, выполняет оптимизацию этой формы, которую можно отключить, передав флаг -fno-strict-aliasing
.
Однако, я думаю, эта проблема применима только в том случае, если два указателя переданы в функции . Внутри тела функции, где создаются два указателя , компилятор должен иметь возможность убедиться, что между ними существует связь относительно того, адресуются ли они в одном месте. Я прав?
В стандарте не проводится различие между тем, откуда эти указатели. Если ваша операция имеет неопределенное поведение, у программы есть неопределенное поведение, период. Компилятор никоим образом не обязан анализировать операнды во время компиляции, но он может дать вам предупреждение.
- 1. Указатели как аргументы функции
- 2. Аргументы функции передаются по значению
- 3. Как аргументы передаются в функции в Python?
- 4. Может ли JSHint обнаруживать, когда дополнительные аргументы передаются функции?
- 5. Указатели и аргументы функции
- 6. Вызов функции передаются как аргументы в Lua
- 7. Попутный указатели как аргументы функции
- 8. типа отбрасывать аргументы функции
- 9. Аргументы не передаются функции в c Ядро
- 10. Как читать stdin, когда аргументы не передаются?
- 11. C++ strcpy указатели, которые передаются функции
- 12. Указатели Хаскелла передаются по значению?
- 13. указатели и структуры передаются через функции
- 14. Python ctypes и указатели как аргументы функции
- 15. указатели на функции - передать аргументы указатель функции
- 16. аргументы передаются внутренней функции в Javascript?
- 17. Как аргументы передаются процессам?
- 18. Выберите, какие аргументы передаются для функции. Javascript
- 19. Как примитивы передаются в функции как аргументы в JavaScript?
- 20. как аргументы передаются методу codeigniter
- 21. Laravel, где передаются дополнительные аргументы для функции
- 22. сценарий не останавливается, когда аргументы передаются
- 23. проблема с псевдонимом
- 24. Декораторы: как аргументы передаются в завернутую функцию?
- 25. Lua: Котируемые аргументы передаются как один в функции
- 26. Указатели функции C++ и аргументы предварительной настройки
- 27. Аргументы VB не передаются
- 28. Консольные аргументы приложения, как аргументы передаются в метод Main
- 29. golang указатели на указатели, как функции параметров
- 30. Функциональные аргументы гарантированно передаются в стек?
Umm ... Если вы передадите указатель на структуру и указатель на первый член этой структуры, эти указатели будут по существу псевдонимом, хотя они являются указателями на разные типы ... – twalberg