考虑以下 Objective-C++ iPhone 应用程序 (TestMemAppDelegate.mm)。它在 iPhone 上以 EXC_BAD_ACCESS 崩溃(3GS 与 iOS 4.0)。它在模拟器中运行良好。这显然是一个内存对齐的事情,因为如果“DataA”结构从 8 字节边界开始,它在 iPhone 上可以正常工作。
谁能解释原因?它与ARM架构有关吗?ARM编译器?
@implementation TestMemAppDelegate
typedef struct DataA
{
float x;
unsigned char y;
};
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
char* mem1 = (char*)malloc(4096);
DataA* ptrA = (DataA*)(mem1 + 1); // Here we shift the alignment
ptrA->x = 10.0f;
printf("A: %.2f\n", ptrA->x); // Here it crashes
// Add the view controller's view to the window and display.
[window addSubview:viewController.view];
[window makeKeyAndVisible];
return YES;
}
@end