https://blog.youkuaiyun.com/lxie0/article/details/82391418
针对32位系统和64为系统下sizeof()的大小,包括指针的长度
长度 | 32位系统 | 64位系统 |
指针 | 4字节 | 8字节 |
int | 4 | 8 |
char | 1 | 1 |
double | 8 | 16 |
https://blog.youkuaiyun.com/Jack_Lantern/article/details/52136133
因为指针存放的是地址,所以32位内存,共4个字节;64位系统的64位地址共8个字节——你应该明白什么了吧!没错,32位指针4字节,64位指针8字节。
当然,CPU只是影响指针大小的首要因素,除了它之外还要看操作系统和编译器的位数。这里指针的大小由这三个东西中位数最小的那项决定。比如,如果CPU、系统都是64位的,但编译器是32位的,那么很显然指针只能是32位4字节大小。
---------------------
作者:夫斯基小哥哥
来源:优快云
原文:https://blog.youkuaiyun.com/Jack_Lantern/article/details/52136133
版权声明:本文为博主原创文章,转载请附上博文链接!
测试程序:
#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
printf("\n------------------------------\n");
int a=0; //全局初始化区
char *p1; //全局未初始化区
int b;//栈
char s[]="abcdefghijk"; //栈
printf("\n------------------------------sizeof(s):%d\n",sizeof(s));// 12
printf("\n------------------------------strlen(s):%d\n",strlen(s));// 11
char *p2 = s ;
printf("\n------------------------------sizeof(p2):%d\n",sizeof(p2));// 8
int n = 10;
printf("\n------------------------------sizeof(n):%d\n",sizeof(n));// 4
char *p3="1234567890"; //123456在常量区,p3在栈上。
printf("\n------------------------------sizeof(p3):%d\n",sizeof(p3));// 8
printf("\n------------------------------strlen(p3):%d\n",strlen(p3));// 10
static int c=0; //全局(静态)初始化区
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //分配得来得10和20字节的区域就在堆区。
strcpy(p1,"123456"); //123456放在常量区,编译器可能会将它与p3所向"123456"优化成一个地方。
printf("\n------------------------------%s\n",p1);
char aa[10];
printf("strlen(aa)%d\n",strlen(aa));// 0
printf("sizeof(aa)%d\n",sizeof(aa));// 10
exit(0);
}
结果: