Освобождающий (vfree-ing) указатель на изменчивые данные
volatile
кажется бесконечным вопросом каждого. Я думал, что знаю все об этом, но потом я столкнулся с этим:
Итак, у меня есть часть памяти, разделяемая между потоками, и я определил это так:
volatile type *name;
Если это заставляет вас чувствовать себя лучше, вы можете себе представить,type
это простоint
.
Это означает, что у меня есть указатель (который не является изменчивым) на некоторые данные, которые изменчивы. Так, например, когда речь идет об оптимизации, компилятор может кэшировать значениеname
но нетname[0]
, Я прав?
Итак, теперь яvfree
с помощью этого указателя (он находится в модуле ядра Linux), и он говорит мне, чтоvfree
ожидаетconst void *
пока я прохожуvolatile type *
.
Я понимаю, как опасно пройтиvolatile type *
какtype *
потому что в этой функции значенияname[i]
может быть кэшировано (в результате оптимизации), что нежелательно.
Я не понимаю почему, хотя,vfree
ожидает от меня отправки указателя обязательно на энергонезависимые данные. Есть ли что-то, чего мне там не хватает? Или это просто парни, которые написалиvfree
не думаешь об этой ситуации?
Я предполагаю, что я просто наведу указатель наvoid *
не принесет вреда, не так ли?