我很难理解下面这段代码:
int stride = 512;
int max_len = 1024 * stride;
char *addr = (char *)malloc(max_len);
for (int i=stride; i<max_len; i += stride)
*(char **)&addr[i-stride] = (char*)&addr[i];
*(char **)&addr[i-stride] = (char*)&addr[0];
Run Code Online (Sandbox Code Playgroud)
看看代码,这似乎是试图创建某种循环链接列表.但我不知道这些演员实际上在做什么.
恕我直言,你提出的代码是不好的味道.
*(char **)&addr[i-stride] = (char*)&addr[0]; 将指针指向addr一些动态分配的区域(右侧部分(char*)&addr[0]可能已写入addr更简单),然后将该地址复制到位于位置的存储器addr[i-stride].
这实际上可能是错误的(未定义的行为),例如当&addr[i-stride](可能被写入addr+i-stride)在某些处理器上没有字对齐时.在你的情况下i碰巧是max_len,stride恰好是512,所以地址是字对齐的(因为malloc给出一个良好对齐的区域).
该代码的原作者可能已经声明了struct(或者可能是union)例如
struct buffer_st {
struct buffer_st* next;
char content[];
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |