2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 17:50 


28/07/13
165
Является ли вызов функций барьером памяти в С++? Другими словами, есть ли разница между
Код:
f();

и
Код:
asm volatile ("" ::: "memory");
f();
asm volatile ("" ::: "memory");

В особенности интересует, если f() будет инлайн, а так же включена link-time оптимизация. Я пытался читать стандарт по ключевым словам "sequence point", но там написано слишком замудрённо для моего уровня английского.

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 19:18 
Заслуженный участник


27/04/09
28128
А тут описание подойдёт?: https://en.wikipedia.org/wiki/Sequence_point#Sequence_points_in_C_and_C++. Части 3, 4, 5. Тут достаточно 3, потому что у вас вызов — отдельная инструкция, так что в конце предыдущей и в конце этой должны быть sequence points, но 4 и 5 в общем случае тоже в кассу.

Правда, про заинлайненные функции всё равно не написано. Но хоть ссылки на стандарт в самом начале раздела указаны — может, там точнее.

user14284 в сообщении #1358198 писал(а):
Я пытался читать стандарт по ключевым словам "sequence point", но там написано слишком замудрённо для моего уровня английского.
Скопируйте сюда куски, которые, вам кажется, связаны — может кто-нибудь переведёт. :-)

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 19:30 


28/07/13
165
Как я понял, sequence point это более слабое понятие, чем барьер памяти. Потому что законченное выражение с точкой запятой это sequence point, но оптимизатор спокойно может их мешать, объединять и выкидывать.

Нашел вот это. Если я правильно понял, барьером являюся только вызовы внешних функций, о реализации которых компилятор не знает. А статические функции (и даже внешние функции со статической линковкой, если включена link-time оптимизация) компилятор вправе оптимизировать как хочет.

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 20:34 
Аватара пользователя


10/10/18
762
At Home
volatile, memory barrier, sequence point -- это три совершенно разные вещи.

Вот немного про барьеры:
http://rsdn.org/forum/cpp/3734032.1
http://www.1024cores.net/home/in-russia ... m-eee-edat

На английском:
https://stackoverflow.com/questions/178 ... d-volatile

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение02.12.2018, 21:14 
Заслуженный участник


27/04/09
28128
user14284 в сообщении #1358220 писал(а):
Как я понял, sequence point это более слабое понятие, чем барьер памяти. Потому что законченное выражение с точкой запятой это sequence point, но оптимизатор спокойно может их мешать, объединять и выкидывать.
Понятно. Я плохо вчитался. :|

 Профиль  
                  
 
 Re: Является ли вызов функций барьером памяти в С++?
Сообщение08.03.2019, 03:24 
Аватара пользователя


07/02/12
1446
Питер
Вероятно, было бы продуктивнее обсудить конкретную задачу (с кодом) и проблемы с ней связанные, нежели упражняться в терминологии :D А вообще говоря - нет, никакой синхронизации общей памяти (в мультипроцессорном смысле) вызов функции давать не обязан.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: granit201z


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group