- 论坛徽章:
- 0
|
本帖最后由 没本 于 2010-05-01 11:39 编辑
s[0]到s[15]被切分为16个4096字节的内存块,是连续的。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <assert.h>
- int main()
- {
- const size_t c = 16;
- const size_t b = 4096;
- char (*s) [4096];
- size_t i;
- s = malloc(b*c);
- for( i=0; i<c; ++i )
- memset(&s[i], i, b);
- for( i=0; i<c; ++i )
- printf("%d %d\n", s[i][0], s[i][b-1]);
- assert( (size_t)(s)+b*c-1==(size_t)&(s[c-1][b-1]) );
- free(s);
- return 0;
- }
- /*
- $ gcc aa.c -o aa
- $ ./aa
- 0 0
- 1 1
- 2 2
- 3 3
- 4 4
- 5 5
- 6 6
- 7 7
- 8 8
- 9 9
- 10 10
- 11 11
- 12 12
- 13 13
- 14 14
- 15 15
- $
- */
复制代码 |
|