- 主题:reinterpret_cast<uint *>(void *) 碰到未对齐内存会出错吗?
这个标准有没有规定?
直接 (int *) 强转会不会出错?
--
FROM 124.72.119.*
那怎么搞定??
uint loaduint(const char *sr) {
uint t;
memcpy(&t, src, sizeof(t));
return t;
}
这样可行不?
【 在 allegro (静水流深) 的大作中提到: 】
: 会
--
FROM 124.72.119.*
也就是说,从 c/cpp 标准看。。直接
int64 load_int64(void *src) {
return *static_cast<int*>(src);
}
这个函数的行为是未定义的是吗?在不同的机器底下,可能会有不同的结果,或者异常?
【 在 z16166 (Netguy) 的大作中提到: 】
: 单纯的cast肯定不会报错,只是deref时可能触发系统异常。也就是语言或者编译器无要求,只是硬件/os的要求。
: x86是没问题的(只是默认情况下。有寄存器开关的),随便align。
: windows下只有kerner driver或者少数的API对于传入的mem有align要求。API的align要求一般也是下层的kernel driver或者硬件引起的。不过这个传参的align和deref的align有差异。
: ...................
--
FROM 140.224.35.*