Освобождающий (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 * не принесет вреда, не так ли?

Ответы на вопрос(2)

Ваш ответ на вопрос