【发布时间】:2015-12-31 17:03:38
【问题描述】:
我想将不同的数据类型存储在同一个分配的内存中,以通过仅分配一次内存来减少执行时间。我发现实际上可以创建一个 uint8_t 变量数组并创建一个指向同一内存地址的新 uint16_t 指针,然后我可以双向读取值。
这允许我创建一个指针,比如说指向已分配内存的中间,并将后半部分的值存储在不同的数据类型中。
这样做可以吗?我知道我需要注意内存边界,但这是不好的风格吗?
这是我的代码:
#include <stdio.h>
#include <inttypes.h>
#include <stdint.h>
#include <stdlib.h>
int main(void){
uint8_t *array;
uint16_t *array2;
array = calloc(6, 1);
array[0] = 257;
printf("array[0]= %" PRIu8 "\n", array[0]);
printf("array[1]= %" PRIu8 "\n", array[1]);
printf("Adresse von array[0] = %p\n", &array[0]);
array2 = &array[0];
printf("Adresse auf die array2 zeigt = %p\n", array2);
array2[0] = 257;
printf("array2[0]= %" PRIu16 "\n", array2[0]);
printf("array2[1]= %" PRIu16 "\n", array2[1]);
printf("array[0]= %" PRIu8 "\n", array[0]);
printf("array[1]= %" PRIu8 "\n", array[1]);
getchar();
return 0;
}
【问题讨论】:
-
了解联合
-
但实际上你并没有将不同数据类型的数据存储在同一个分配的内存中。
-
手动执行此操作是一种不好的做法,因为数据类型可能具有不同的内存对齐要求。使用
union。 -
你真的不可能加快执行速度。任何体面的标准库都会为您重用内存。这种事情往往只在您分配大块内存时才值得,大到您使用操作系统调用而不是库调用。
标签: c memory memory-management