我很好奇,爲什麼我的代碼在x86和armeabi平臺上有不同的行爲。代碼的概念(這是不是真正的代碼,但它是足夠了解的問題):轉換不同數據類型時的內存對齊
struct data
{
int x;
}
void method(unsigned char* buff)
{
data D;
memcpy(&D.x, buff, sizeof(int)); //good approach
D.x = *(int*)buff; //bad approach
}
所以,當這個代碼是由GCC ARM架構下的編譯 - 它在行導致SIGFAULT(未對齊的內存)通過轉換數據類型,儘管msvc編譯的代碼運行正常。據我所知,在這種情況下唯一正確的解決方案是使用memcpy。有人可以解釋運行時真正發生了什麼嗎?
你很酷。很多。 –