volatile 是C++中一个非常重要的关键,其本意是易变得,用于告诉编译器,使用该关键字修饰的变量不能优化,不能使用寄存器中的值代替内存中的值使用,所有更改操作都要及时的刷新到内存上,所有的读取都要从内存读取(编译器优化后,变量的更改不会立即刷新到内存,如果一个变量已经被加载到缓存,就直接使用,而不会从内存读取),要保持该变量相关的操作的顺序性。
restrict 只能用于修饰指针,被该关键字修饰的指针所指向的内存区域,只能通过该指针修改,不能通过别的指针修改内容。编译器通过这些信息可以更好的优化代码,生成效率更高的汇编代码。