Аналог сишного типа данных

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Аналог сишного типа данных

Сообщение Vadim » 04.12.2018 11:39:30

В С\С++ есть типы данных с модификатором "volatile", например:
Код: Выделить всё
volatile int mydata;

есть ли в FPC\\Delphi аналог этого модификатора?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение Снег Север » 04.12.2018 15:29:27

Аналога нет, но когда-то попадалось в форумах, что похожим образом ведут себя глобально объявленные переменные.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: Аналог сишного типа данных

Сообщение olegy123 » 04.12.2018 15:46:55

volatile - значит что Си с переменной ничего хитрого не сделает, не засунет в регистры, в стек совать тоже не станет.
В паскале вроде все классы создаются в куче. так что принудительно описывать не нужно. За исключением внутри функций.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Аналог сишного типа данных

Сообщение Vadim » 04.12.2018 16:12:25

Снег Север писал(а):Аналога нет, но когда-то попадалось в форумах, что похожим образом ведут себя глобально объявленные переменные.

Хорошенькое дело... У меня эта переменная объявлена как параметр сишной функции, так что глобальная переменная тут, наверное, не подойдёт... :-)

Добавлено спустя 4 минуты 13 секунд:
olegy123 писал(а):volatile - значит что Си с переменной ничего хитрого не сделает, не засунет в регистры, в стек совать тоже не станет.

Я примерно понимаю. Предполагается, что эту переменную может (внезапно :-) ) изменить кто-то другой, поэтому такое изменение должно быть безопасным.
Такой модификатор идёт с параметром функции и я не совсем понимаю, если в паскальном заголовочнике его убрать, не случиться ли чего-нибудь архиужасного, после чего "мне осталась одна забава - пальцы в рот, да весёлый свист..." ... :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение Снег Север » 04.12.2018 18:31:04

Vadim писал(а): У меня эта переменная объявлена как параметр сишной функции, так что глобальная переменная тут, наверное, не подойдёт...

Хм... Тогда я бы ее определил с признаком var.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: Аналог сишного типа данных

Сообщение Vadim » 04.12.2018 18:50:13

Снег Север
Ок. Я ишшо подумаю над этим... :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение fedan » 04.12.2018 21:13:01

ещё volatile в си ставят тогда, когда не хотят чтобы оптимизатор переместил кусок кода куда-нибудь на своё усмотрение
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение Mirage » 05.12.2018 01:03:44

Модификатор volatile в С практически бесполезен. Все что он делает - не дает компилятору оптимизировать переменную. В регистр там засунуть, или порядок операций изменить (процессору не мешает это делать, в отличии от весьма полезного джавовского volatile).
Единственное его разумное применение, которое приходит на ум, это весьма узкоспециализированный случай записи в переменную каким-либо железом по прерыванию. И то лучше наверное просто адрес в памяти ему дать, а не переменную. Так что можно смело игнорировать.

Кстати, в маиллисте FPC упоминали, что глобальные переменные в FPC иногда используются для синхронизации каким-то образом, и надо сохранять с этим совместимость. Что довольно печально, т.к. такие "синхронизации" ненадежны.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Аналог сишного типа данных

Сообщение serbod » 05.12.2018 10:48:09

Mirage писал(а):Кстати, в маиллисте FPC упоминали, что глобальные переменные в FPC иногда используются для синхронизации каким-то образом, и надо сохранять с этим совместимость. Что довольно печально, т.к. такие "синхронизации" ненадежны.

Чем ненадежно синхронизировать через Interlocked* функции?

В Паскале есть модификатор absolute, можно через него привязать идентификатор к любому адресу памяти или адресу переменной любого типа. Что позволяет использовать одну и ту же память переменными разного типа.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Аналог сишного типа данных

Сообщение Vadim » 05.12.2018 12:11:00

Я решил в паскалевском варианте функции эту самую "volatile" игнорировать. В сишном варианте - две переменные, указатели, обмениваются в этой функции данными между собою. Аналог Swap() из Бейсика. :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение Mirage » 05.12.2018 23:42:14

serbod писал(а):Чем ненадежно синхронизировать через Interlocked* функции?


Разве я говорил что-то про interlocked функции? Речь идет об использовании недокументированной, насколько я знаю, особенности глобальных переменных для межпоточной синхронизации.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Аналог сишного типа данных

Сообщение olegy123 » 06.12.2018 09:48:19

Vadim писал(а):В сишном варианте - две переменные, указатели, обмениваются в этой функции данными между собою.
Если это происходит в разных потоках, то тогда почему не классика - мютекс?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Аналог сишного типа данных

Сообщение Vadim » 06.12.2018 11:23:56

olegy123 писал(а):Если это происходит в разных потоках, то тогда почему не классика - мютекс?

Даже не догадываюсь об этом... Проект не мой, я только делаю заголовочные файлы для FP...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение fedan » 02.02.2019 19:42:35

fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение Vadim » 28.03.2019 11:24:56

Опять возник вопрос про сишные аналоги... :-D
Кто-нибудь знает, есть ли в FPC какой-нибудь приблизительный аналог сишного int128_t?

Примечание: int128_t - это гарантированно 128-битное знаковое целое значение вне зависимости от разрядности компилятора.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Free Pascal Compiler

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru