Estou ciente de que múltiplas cargas não voláteis podem ser colapsadas em uma única carga pelo compilador. Isso significa que funções de mapeamento de memória podem criar comportamento indefinido?
por exemplo:
int k = *p;
unmapFile(fm, fileHandle1);//the unmapped memory includes the address pointed to by p
//p is no longer valid, pointing to a virtual address that is unmapped
mapFile(fm, fileHanlde2);//p now points to an address somewhere in a different file
int j = *p;
//use k and j here
as duas desreferências de p podem ser reunidas em uma, fazendo com que o código se comporte de forma imprevisível?
como um aparte, eu sei que funções de mapeamento de arquivo não permitem que você especifique o endereço inicial do mapa (pelo menos em posix e windows), mas essa foi a hipótese mais simples que eu consegui pensar. De fato, há casos de uso para esse paradigma.