#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char str[] = "Hello, World.";
char sta[20] = "Hello";
char *p = str;
char abc = 'c';
int ia = 4;
int ic[10];
/* 每个数组成员的大小是1,当然不要忘了后面还有一个结束符 '\0' */
printf("str[] 14: %d\n", sizeof(str) );
/* 固定数组长度,大小为数组长度值 */
printf("sta[20] 20: %d\n", sizeof(sta) );
/* 指针为地址,地址的长度和32位还是64位系统有关,32位系统为4, 64位系统值为8 */
printf("*p 8: %d\n", sizeof(p) );
/* 好理解,就是字符的大小 */
printf("abc 1: %d\n", sizeof(abc) );
/* int 占用4个字节 */
printf("ia 4: %d\n", sizeof(ia) );
/* 原理同字符数组 */
printf("ic 40: %d\n", sizeof(ic) );
return 0;
}
运行结果如下:
(1) 64为ubuntu编译运行
str[] 14: 14
sta[20] 20: 20
*p 8: 8
abc 1: 1
ia 4: 4
ic 40: 40
(2) 32位arm编译运行
str[] 14: 14
sta[20] 20: 20
*p 8: 4
abc 1: 1
ia 4: 4
ic 40: 40
C语言内存大小解析
本文通过几个简单的C语言示例程序,详细解释了不同数据类型(如字符串、指针、整型等)在内存中所占的空间大小。通过运行这些示例程序,在64位Ubuntu和32位ARM系统上对比了输出结果,揭示了不同系统架构下内存分配的特点。
9338

被折叠的 条评论
为什么被折叠?



