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 soyvfree
ing 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í?