Этот вопрос не о техническом использовании с ограничениями, а о субъективном использовании.Хотя я могу ошибаться в отношении того, как технически работает ограничение, в этом случае вы можете смело критиковать меня за то, что я основал вопрос на ложной предпосылке.
Вот два примера того, как я пока использую ограничение:
Если у меня есть функция, которая берет указатель на последовательность неизменяемых символов, я не говорю, что она ограничена, так как другим людям разрешен доступ к данным через их собственные указатели одновременно сфункция выполняется, например, из другого параллельного потока.Данные не изменяются, поэтому нет проблем.
Однако, если функция получает указатель на последовательность изменяемых символов, которую она может изменить, я говорю, что она ограничена, потому что данные абсолютно не должны быть доступны вв любом случае из любого указателя (за исключением аргумента, который функция явно использует) во время выполнения функции из-за потенциально противоречивых данных.В нем также указана возможность изменения данных, поэтому кодировщик знает, что не нужно читать устаревшие данные, и что им следует использовать барьер памяти при доступе или что-то в этом роде ...
Я не много кодирую C,Я легко могу ошибаться в том, что я здесь предполагаю.Это правильное использование restrict?Стоит ли делать в этом сценарии?
Я также предполагаю, что когда ограниченный указатель выталкивается из стека при возврате функции, что к данным можно затем снова получить свободный доступ через любой другой указатель, и чтоограничение действует только до тех пор, пока ограниченный указатель.Я знаю, что это зависит от кодера, следующего правилам, поскольку доступ к ограниченным данным через «неофициальный» указатель является UB.
Я все понял правильно?
РЕДАКТИРОВАТЬ:
Я просто хотел бы прояснить, что я уже знаю, что он абсолютно ничего не препятствует доступу пользователей к данным через несколько потоков, и я также знаю, что C89 не знает, что такое потоки'even are.
Но, учитывая, что любой контекст, в котором аргумент может быть изменен с помощью ссылки, ясно, что он не должен быть доступен во время работы функции.Это ничего не делает для обеспечения безопасности потоков , но оно четко документирует, что вы изменяете данные с помощью своего собственного указателя во время выполнения функции на свой страх и риск .
Даже если многопоточность полностью исключена из уравнения, вы все равно допускаете дальнейшую оптимизацию в сценарии, где он мне кажется правильным.
Несмотря на это, спасибо за все ваши авторитетные ответы до сих пор.Подчеркну ли я все ответы, которые мне понравились, или только тот, который я принимаю?Что делать, если принято более одного?Извините, я новичок здесь, теперь я буду более подробно просматривать FAQ ...