Вопросы по теме 'strict-aliasing'

Исправление для разыменования указателя с типом, которое нарушает строгий псевдоним.
Я пытаюсь исправить два предупреждения при компиляции конкретной программы с использованием GCC. Предупреждения: предупреждение: разыменование указателя с каламбуром типа нарушит правила строгого псевдонима [-Wstrict-aliasing] и двумя...
68325 просмотров
schedule 06.03.2024

освободить/удалить объединение malloc/новый массив в C/C++
Я работал и рассматривал возможность использования профсоюза. Я отказался от этого, потому что дизайн действительно требовал структуры/класса, но в конечном итоге это привело к следующему гипотетическому вопросу: Предположим, у вас есть союз,...
3598 просмотров
schedule 22.03.2023

Понимание квалификатора limited на примерах
Поведение ключевого слова restrict определено в C99 в 6.7.3.1: Пусть D будет объявлением обычного идентификатора, который предоставляет средства для обозначения объекта P как указателя с ограничением на тип T. Если D появляется внутри...
2753 просмотров
schedule 05.10.2023

Почему GCC и Clang не делают эту оптимизацию псевдонимов?
У меня есть случай , когда друг применяет объект небазового класса типа «Базовый» в объект типа класса «Производный», где «Производный» является производным классом «Базового» и добавляет только функции, но не данные. В приведенном ниже коде я...
1661 просмотров

GCC: точность предупреждений о строгом псевдониме
Я пытаюсь проверить часть своего кода на предмет строгих нарушений псевдонима, но похоже, что я что-то пропустил, пытаясь понять правило строгого псевдонима. Представьте себе следующий код: #include <stdio.h> int main( void ) {...
5099 просмотров
schedule 15.03.2022

Реализация Memcpy, строгое сглаживание
Изучая c, я реализовал свои собственные функции memcpy. Я использовал более широкий тип ( uint32_t ) в функции. (Для простоты функция ограничена типами, кратными 4, и данные правильно выровнены) void memcpy4( void* dst , void* src , int size )...
1294 просмотров
schedule 02.06.2022

Нарушает ли доступ к массиву структуры POD как массиву ее единственного члена строгое сглаживание?
У меня есть целочисленные значения, которые используются для доступа к данным в несвязанных хранилищах данных, то есть дескрипторах. Я решил обернуть целые числа в структуру, чтобы иметь строго типизированные объекты, чтобы нельзя было перепутать...
549 просмотров
schedule 04.05.2024

Самое простое эмпирическое правило, чтобы не нарушать правила строгого псевдонима?
При прочтении еще одного вопроса о псевдонимах ( Что такое строгое правило псевдонима? ) и Это главный ответ, я понял, что все еще не полностью удовлетворен, хотя мне кажется, что я все это понял. ( Этот вопрос теперь помечен как C и C ++. Если...
726 просмотров
schedule 29.02.2024

Строгий псевдоним и указатель на поля объединения
У меня вопрос о строгих правилах сглаживания, объединениях и стандарте. Предположим, у нас есть следующий код: #include <stdio.h> union { int f1; short f2; } u = {0x1}; int * a = &u.f1; short * b = &u.f2; int...
585 просмотров
schedule 10.04.2022

Сборка fiware-IoTAgent-Cplusplus из исходного кода не удалась из-за ошибки строгого псевдонима.
Я пытаюсь собрать fiware-IoTAgent-Cplusplus из исходного кода, но получаю ошибку строгого псевдонима. Есть идеи? Команды, которые я использовал для сборки, следующие. Обратите внимание, что я строю внутри lxc, используя CentOS 6.7. $source...
34 просмотров
schedule 11.12.2022

Создание недопустимой ссылки с помощью переинтерпретации приведения
Я пытаюсь определить, вызывает ли следующий код неопределенное поведение: #include <iostream> class A; void f(A& f) { char* x = reinterpret_cast<char*>(&f); for (int i = 0; i < 5; ++i) std::cout << x[i]; }...
237 просмотров

Соответствует ли стандарту совмещение указателей между агрегированными структурами C и их членами?
Является ли следующая программа C соответствующей стандартам (и по каким стандартам)? Если он не соответствует требованиям (нарушая строгое правило псевдонимов или иным образом), является ли он «безопасным» по отношению к GCC или любому другому...
62 просмотров
schedule 03.06.2024

Нарушение строгого сглаживания даже без приведения?
Думаю, я действительно спрашиваю: является ли псевдоним «транзитивным»? Если компилятор знает, что A может быть псевдонимом B, а B может быть псевдонимом C, то, конечно же, он должен помнить, что A, следовательно, может быть псевдонимом C. Возможно,...
102 просмотров
schedule 02.06.2022

Нарушает ли приведение массива символов к другому типу строгие правила псевдонимов?
Рассмотрим эти две функции: int f1() { alignas(int) char buf[sizeof(int)] = {}; return *reinterpret_cast<int*>(buf); } int f2() { alignas(int) char buf[sizeof(int)] = {}; char* ptr = buf; return...
803 просмотров

Строго соответствует ли такое использование профсоюзов?
Учитывая код: struct s1 {unsigned short x;}; struct s2 {unsigned short x;}; union s1s2 { struct s1 v1; struct s2 v2; }; static int read_s1x(struct s1 *p) { return p->x; } static void write_s2x(struct s2 *p, int v) { p->x=v;} int test(union...
821 просмотров
schedule 25.01.2023

С++ строгий независимый алиасинг
Я читал много QA о строгом псевдониме здесь, в Stack Overflow, но все они довольно распространены, и обсуждение всегда имеет тенденцию ссылаться на глубокие детали стандарта C ++, которые почти всегда трудно понять правильно. Особенно, когда...
423 просмотров
schedule 24.09.2023

C неопределенным поведением. Строгое правило алиасинга или неправильное выравнивание?
Я не могу объяснить поведение этой программы при выполнении: #include <string> #include <cstdlib> #include <stdio.h> typedef char u8; typedef unsigned short u16; size_t f(u8 *keyc, size_t len) { u16 *key2 = (u16 *) (keyc...
3966 просмотров
schedule 27.07.2023

Является ли использование результата new char[] или malloc для приведения float * UB (строгим нарушением псевдонимов)?
Какой из них имеет UB (в частности, который нарушает строгое правило псевдонимов)? void a() { std::vector<char> v(sizeof(float)); float *f = reinterpret_cast<float *>(v.data()); *f = 42; } void b() { char *a = new...
535 просмотров

Каково обоснование строгого правила псевдонимов?
В настоящее время меня интересует обоснование строгого правила псевдонимов. Я понимаю, что определенные псевдонимы не разрешены в C и что намерение состоит в том, чтобы разрешить оптимизацию, но я удивлен, что это было предпочтительным решением по...
192 просмотров
schedule 19.11.2023

Непоследовательные строгие правила псевдонимов
У меня есть следующая программа, в которой я инициализирую два буфера, казалось бы, быстрым способом, приводя 8-битный буфер к 32- и 64-битным значениям. #include <stdio.h> #include <stdint.h> typedef struct { uint32_t a[2];...
81 просмотров
schedule 06.05.2024