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

Нарушает ли доступ к первому полю структуры через приведение C строгое сглаживание?
Нарушает ли этот код строгое сглаживание? struct {int x;} a; *(int*)&a = 3 Говоря более абстрактно, допустимо ли приведение типов между разными типами, если примитивные операции чтения/записи имеют правильный тип?
2027 просмотров

Когда я МОГУ нарушать правила псевдонимов?
Я получаю это предупреждение. Я хотел бы определенное поведение, но я хотел бы сохранить этот код как есть. Когда я могу нарушать правила псевдонимов? предупреждение: разыменование указателя с символом типа нарушит правила строгого псевдонима...
401 просмотров
schedule 12.04.2022

строгое алиасинг и выравнивание
Мне нужен безопасный способ псевдонима между произвольными типами POD, соответствующий ISO-C ++ 11, явно учитывая 3.10 / 10 и 3.11 n3242 или новее. Здесь есть много вопросов о строгом псевдониме, большинство из которых касается C, а не C ++. Я нашел...
6364 просмотров

align_storage и строгие псевдонимы
В настоящее время я используюalign_storage для реализации типа «Необязательный», аналогичный типу boost:: необязательный. Для этого у меня есть такой член класса: typename std::aligned_storage<sizeof(T),...
1791 просмотров

Приведение между указателями примитивных типов
Четко определено следующее: char* charPtr = new char[42]; int* intPtr = (int*)charPtr; charPtr++; intPtr = (int*) charPtr; intPtr неправильно выровнен (по крайней мере, в одном из двух случаев). Это незаконно, просто иметь его там?...
905 просмотров
schedule 07.03.2022

Как избежать ошибок строгого алиасинга при использованииalign_storage
Я использую std::aligned_storage в качестве резервного хранилища для шаблона вариантов. Проблема в том, что как только я включаю -O2 на gcc, я начинаю получать предупреждения о том, что «разыменование указателя с типизированным типом нарушит...
775 просмотров
schedule 12.10.2022

Избегает ли FlatBuffers как-то строгого алиасинга?
Я недавно смотрел библиотеку FlatBuffers. Я хотел оценить его для использования в моем проекте. Посмотрев на flatbuffers.h , мне интересно если есть нарушение правила строгого псевдонима и если оно действительно для строгого алиасинга, может...
517 просмотров
schedule 11.12.2022

Написание memcpy со строгим псевдонимом
Общий ответ на вопрос «как реализовать функцию memcpy, соответствующую строгим правилам алиасинга», выглядит примерно так: void *memcpy(void *dest, const void *src, size_t n) { for (size_t i = 0; i < n; i++) ((char*)dest)[i] =...
1814 просмотров
schedule 31.05.2022

строгое алиасинг в C
Вопрос о каламбурах типов: почему этот код нарушает строгие правила псевдонима: int main() { int a = 1; short j; printf("%i\n", j = *((short*)&a)); return 0; } а это не так: int main() { int a = 1; short j;...
854 просмотров
schedule 16.03.2022

Приведение char[] к ussigned int дает: разыменование указателя с типизированным типом нарушит строгие правила сглаживания
У меня есть строка в исходном коде некоторого наследия: #define MAXMSG 1024 ... char m_recvBuf[MAXMSG]; unsigned int msgLength = ntohl(*((unsigned int *)m_recvBuf)); Это дает следующее предупреждение: x.cpp: In member function ‘bool...
258 просмотров
schedule 23.05.2022

Можно ли включить оптимизацию времени компоновки при отключении строгого псевдонима только для некоторых функций?
Моя программа соответствует строгому правилу псевдонимов, за исключением одного места: блока компиляции, который содержит функции хеширования, такие как MurmurHash3, SpookyHash и т. Д. В x86 и x86_64 эти функции хеширования принимают const char * ,...
1586 просмотров
schedule 18.08.2022

В С++, что означает доступ в строгом правиле псевдонимов?
3.10/10 говорит: Если программа пытается получить доступ к хранимому значению объекта через значение gl, отличное от одного из следующих типов, поведение не определено: Однако термин «доступ» нигде не определен. В данном контексте это...
179 просмотров
schedule 01.10.2022

Совместим ли этот союз со строгими правилами псевдонимов?
Можно ли использовать обе части объединения, если вы знаете, что части не пересекаются? Как и в этом примере, можно ли использовать как buf[31], так и ps? struct PtrSize { const char *data; size_t size; }; class SmallStringOrNot { union {...
57 просмотров
schedule 05.08.2022

Нарушает ли приведение к char*, а затем обратное приведение к исходному типу, строгое сглаживание?
Например, я привожу указатель на int к указателю на char : int originalVar = 1; char *arr = (char *)&originalVar; Затем я отбрасываю его обратно (возможно, я передаю arr другой функции): int *pOriginal = (int *)arr; Это...
89 просмотров
schedule 15.04.2022

reinterpret_cast, std::aligned_storage и новое размещение
Рассмотрим следующий объект: std::array<std::aligned_storage_t<sizeof(T), alignof(T)>, size> container; Если я уже назвал размещение нового для первого элемента этого массива, я считаю вполне приемлемым сделать следующее:...
609 просмотров

Почему POSIX противоречит стандартам ISO C
См. http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/socket.h.html ( http://pubs.opengroup.org/onlinepubs/9699919799 взято из выпуска 7 – 2013 г. и все равно!) sockaddr_storage предназначен для приведения к другим типам структур,...
227 просмотров

Может ли указатель создавать псевдоним беззнакового массива символов?
#include "stdio.h" /* array to store data receeived from CAN Bus */ unsigned char a[8] = {0xCD, 0xEF, 0x12, 0x34, 0x50, 0x00, 0x00, 0x00}; typedef struct { unsigned int a:12; unsigned int b:12; unsigned int c:12; unsigned int...
257 просмотров
schedule 29.03.2023

Нарушает ли этот код строгое правило псевдонимов?
Вопросы: Этот код ниже нарушает строгие правила псевдонимов? То есть будет ли разрешено умному компилятору печатать 00000 (или какой-то другой неприятный эффект), потому что к буферу, сначала доступному как к другому типу, затем обращаются...
1336 просмотров
schedule 08.12.2023

Является ли это ошибкой повторного использования хранилища (алиасинга) в gcc 6.2?
Из того, что я могу сказать, следующий код должен иметь 100% определенное поведение при любом разумном прочтении Стандарта для платформ, которые определяют int64_t и где long long имеет одинаковый размер и представление, независимо от того,...
48 просмотров
schedule 13.10.2023

Обычный полиморфизм C, каламбур и строгий псевдоним. Насколько это законно?
Я пытался понять, насколько законно приведенное ниже, и мне действительно нужна помощь. #include <stdio.h> #include <stdlib.h> typedef struct foo { int foo; int bar; } foo; void make_foo(void * p) { foo * this = (foo...
464 просмотров