Freeing (vfree-ing) puntero a datos volátiles

volatile parece ser una pregunta interminable de todos. Pensé que sabía todo al respecto, pero luego me encontré con esto:

Entonces, tengo un trozo de memoria compartida entre hilos y lo definí así:

volatile type *name;

Si te hace sentir mejor, puedes imaginartype es solo unint.

Esto significa que tengo un puntero (que no es volátil) a algunos datos que son volátiles. Entonces, por ejemplo, cuando se trata de optimizar, el compilador puede almacenar en caché el valor dename pero noname[0]. ¿Estoy en lo cierto?

Entonces, ahora soyvfreeing este puntero (está en un módulo de kernel de Linux) y me dice quevfree esperaconst void * mientras lo pasovolatile type *.

Entiendo cómo puede ser peligroso pasar unavolatile type * como untype * porque en esa función, los valores dename[i] podría almacenarse en caché (como resultado de la optimización), lo que no es deseable.

No entiendo por qué, sin embargo,vfree espera que le envíe un puntero necesariamente a datos no volátiles. ¿Hay algo que me estoy perdiendo allí? ¿O son solo los chicos que escribieronvfree ¿No estás pensando en esta situación?

Supongo que simplemente lanzo mi puntero avoid * no causaría ningún daño, ¿es así?

Respuestas a la pregunta(2)

Su respuesta a la pregunta