Size: a a a

2020 April 01

N

Nекита in pro.cxx
GoodBye
Или было бы ошибкой только в том случае, если бы currentArg так же был restrict?
Верно
источник

G

GoodBye in pro.cxx
Nекита
Верно
Тогда еще такой вопрос
void attribute((fastcall)) writeTextField(char * * const field, const char * const value)

char * * restrict const field
источник

G

GoodBye in pro.cxx
Верно?
источник

N

Nекита in pro.cxx
GoodBye
Но у меня же 2 переменные указывают на один и тот же блок памяти
Ты должен знать почему используешь рестрикт. Если ты читаешь и записываешь только через рестрикт поинтер, то все норм. Через обычный можно только читать, и только если объект по адресу никак не модифицируется. Иначе уб
источник

N

Nекита in pro.cxx
Вруби еще стрикт алиасинг на всякий, какие-то типичные ошибки может словить
источник

G

GoodBye in pro.cxx
Nекита
Ты должен знать почему используешь рестрикт. Если ты читаешь и записываешь только через рестрикт поинтер, то все норм. Через обычный можно только читать, и только если объект по адресу никак не модифицируется. Иначе уб
Будет UB, правильно понимаю?
struct SomeStruct * func(struct SomeStruct * restrict SS)
{
 return realloc(SS, N);
}
источник

G

GoodBye in pro.cxx
Nекита
Вруби еще стрикт алиасинг на всякий, какие-то типичные ошибки может словить
gcc -fstrict-aliasing Верно?
источник

N

Nекита in pro.cxx
GoodBye
Будет UB, правильно понимаю?
struct SomeStruct * func(struct SomeStruct * restrict SS)
{
 return realloc(SS, N);
}
Нет, не будет
источник

N

Nекита in pro.cxx
GoodBye
gcc -fstrict-aliasing Верно?
Да
источник

G

GoodBye in pro.cxx
Nекита
Нет, не будет
Но ты же пишешь
 если объект по адресу никак не модифицируется. Иначе уб
источник

G

GoodBye in pro.cxx
Или имеется ввиду, что элементы структуры никак не модифицируются?
источник

N

Nекита in pro.cxx
GoodBye
Или имеется ввиду, что элементы структуры никак не модифицируются?
Где здесь хотя бы 2 поинтера? Какой смысл? Ты рестрикт используешь при нескольких поинтерах, чтобы дать понять компилятору, что они друг от друга никак не зависят. В сообщении выше я писал про указатель БЕЗ рестрикт, который пытается изменить что-то по адресу другого поинтера, который рестрикт. Ух
источник

G

GoodBye in pro.cxx
Nекита
Где здесь хотя бы 2 поинтера? Какой смысл? Ты рестрикт используешь при нескольких поинтерах, чтобы дать понять компилятору, что они друг от друга никак не зависят. В сообщении выше я писал про указатель БЕЗ рестрикт, который пытается изменить что-то по адресу другого поинтера, который рестрикт. Ух
Всё, дошло. Спасибо)
источник

m

magras in pro.cxx
Мне проще думать о restrict в терминах оптимизаций, которые он разрешает:
1) не перечитывать значение если оно было загружено из памяти ранее
2) не сохранять промежуточные результаты назад в память
источник

G

GoodBye in pro.cxx
Nекита
Где здесь хотя бы 2 поинтера? Какой смысл? Ты рестрикт используешь при нескольких поинтерах, чтобы дать понять компилятору, что они друг от друга никак не зависят. В сообщении выше я писал про указатель БЕЗ рестрикт, который пытается изменить что-то по адресу другого поинтера, который рестрикт. Ух
Хотя опять же сошлюсь на этот код
https://pastebin.com/Rss2ytGq

currentArg у меня обычный поинтер на restrict.

В таком случае структуру Arguments по указателю currentArg я могу только читать, и изменять элементы этой структуры не могу. Верно?
источник

N

Nекита in pro.cxx
GoodBye
Хотя опять же сошлюсь на этот код
https://pastebin.com/Rss2ytGq

currentArg у меня обычный поинтер на restrict.

В таком случае структуру Arguments по указателю currentArg я могу только читать, и изменять элементы этой структуры не могу. Верно?
Верно
источник

G

GoodBye in pro.cxx
Nекита
Верно
И так же я не могу сделать currentArg restrict указателем, т.к. это тот же блок?
источник

N

Nекита in pro.cxx
GoodBye
И так же я не могу сделать currentArg restrict указателем, т.к. это тот же блок?
Ага, но если возьмешь в {}, то сможешь
источник

G

GoodBye in pro.cxx
Nекита
Ага, но если возьмешь в {}, то сможешь
немного не понял
источник

N

Nекита in pro.cxx
GoodBye
немного не понял
источник