C语言 使用 uint8_t 为双数组分配内存



我动态分配了一个uint8_t内存数组

uint8_t* array = malloc( sizeof( double ) * 100 );

我想将双精度存储到内存中。这是否被视为定义的行为,或者我必须担心一些对齐问题?

double* d = ( void* )array ;
for( int i = 0 ; i < 100 ; i++ )  
    d[i] = 3.1415 ;    //any double will do here

d的行为应该相同,就好像我只是将 d 分配为 :

double* d = malloc( sizeof( double ) * 100 );

另外,如果我更改指针数组以进一步指向内存,如下所示:

 double* d = ( void* )(array + sizeof( double ) * 50 ) ;
 for( int i = 0 ; i < 50; i++ )  
    d[i] = 3.1415 ;    //any double will do here

d的行为是否与

double* d = malloc( sizeof( double ) * 50);

(如何正确释放内存不是这里的问题)

C 标准保证

如果分配成功,则返回 [malloc] 的指针是合适的 对齐,以便可以将其分配给指向任何类型的对象的指针 然后用于访问此类对象或此类对象的数组 在分配的空间中

在 7.20.3 "内存管理功能" [#1] 中

因此,您的代码是安全的。

OpenGroup 将 malloc 定义为返回一个对任何类型都充分对齐的指针,双包含,因此它应该可以正常工作。

最初的"uint8_t *"对分配的内存没有影响。将地址放在双指针中后,您应该不会注意到任何区别。

相关内容

  • 没有找到相关文章

最新更新