我实现了一个(直接映射)缓存,其中包含一些行(每个包含一个int[ROW_SIZE]
数组),简化如下:
struct Cache {
int data[ROWS][ROW_SIZE];
};
假设struct Cache* cache;
在任何函数之外,我在函数内初始化缓存:
cache = malloc(sizeof(struct Cache));
memset(cache -> data, 0, sizeof(cache -> data[0][0]) * ROWS * ROW_SIZE);
现在,我想在以下函数中设置和设置缓存行:
void write_to_row(int row, int* new_data) {
memcpy(cache -> data[row], new_data, ROW_SIZE);
}
int* read_from_row(int row) {
return cache -> data[row];
}
我从未malloc
data
成员struct Cache
,所以我想知道这段代码是否真的会在cache -> data
中保留更改,即使它目前没有抛出错误。
当我将struct Cache* cache;
放在任何函数之外的文件顶部时,编译器是否自动将{... 1}}成员的数据留在内存中?
如果我使用了以下data
?
struct
谢谢!