是合法的。这可以通过使用编译器的特定选项来实现。例如,在GCC中,可以使用“-falign-malloc=n”选项,其中n表示所需对齐的字节。如果n设置为1,则分配的内存将不对齐;设置为0将使用默认对齐方式。示例代码如下:
#include
#include
int main()
{
int* p = (int*)malloc(sizeof(int) * 10);
printf("%p\n", (void*)p);
free(p);
int* q = (int*)aligned_alloc(16, sizeof(int) * 10);
printf("%p\n", (void*)q);
free(q);
return 0;
}
以上代码中,第一个malloc分配的内存不对齐,而第二个aligned_alloc分配的内存将对齐到16字节。