我有下一个代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <memory>
#include <string.h>
int main()
{
char a = 'A';
unsigned int b = 1000;
char* arr = (char*)malloc(sizeof(a));
memcpy(arr, &a, sizeof(a));
arr = (char*)realloc(arr, sizeof(arr) + sizeof(b));
memcpy(arr + sizeof(a), &b, sizeof(b));
const char* pData = arr;
assert(*pData == a);
pData += sizeof(a);
assert(*(unsigned int*)pData == b);
printf("finished\n");
}
此代码在带有 x86 前处理器的系统上运行良好,但在 Blackfin 设备上失败。在 Blackfin 设备上发生错误。从错误消息的第一行是:
数据访问未对齐地址违规
我读到 Blackfin 处理器在没有与字长数据对齐的情况下无法工作。然后我尝试了下一个代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <memory>
#include <string.h>
int main()
{
char a[] = "AAA";
unsigned int b = 1000;
char* arr = (char*)malloc(sizeof(a));
memcpy(arr, &a, sizeof(a));
arr = (char*)realloc(arr, sizeof(arr) + sizeof(b));
memcpy(arr + sizeof(a), &b, sizeof(b));
const char* pData = arr + sizeof(a);
assert(*(unsigned int*)pData == b);
printf("finished\n");
}
此代码适用于 x86 和 Blackfin 硬件。现在我有一个问题:是否存在不是从代码手动对齐数据的方法,而是通过例如编译器选项?
感谢您的关注!