sizeof(int)=啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sizeof(int)=啥?相关的知识,希望对你有一定的参考价值。

sizeof操作符检测的是系统为后面()中(无歧义时不用()也行)的类型、变量等分配的内存空间的字节数,这里()中是int,就是求系统为int类型的变量分配几个字节。显然这与所用系统int类型的字长有关,所以——
在16位int平台下是2;
在32位int平台下是4;
在64位int平台下是8。
参考技术A

sizeof操作符检测的是系统为后面()中(无歧义时不用()也行)的类型、变量等分配的内存空间的字节数,这里()中是int,就是求系统为int类型的变量分配几个字节。

1.在16位int平台下是2;

2.在32位int平台下是4;

3.在64位int平台下是8。

参考技术B sizeof是一个运算符,Pascal的一种内存容量度量函数,C语言中判断数据类型长度符。int占2个字节所以sizeof(int)=2。 参考技术C sizeof是一个运算符,返回的是关于某个变量或者数据类型的大小,即字节长度。
至于sizeof(int)的值就要看你的编译器的设置了吧,32位的CPU默认的是4个字节,64位是8个字节,16位是2个字节。
参考技术D 一个整型数据的所占字节数,现在一般为4本回答被提问者采纳

malloc和数组有啥区别

【中文标题】malloc和数组有啥区别【英文标题】:What is the difference between malloc and arraymalloc和数组有什么区别 【发布时间】:2016-07-19 05:34:51 【问题描述】:

我想问一下malloc和array。

int *x;

x = (int*)malloc(sizeof(int));

int x[4];

它们有什么区别?

【问题讨论】:

Difference between declaration and malloc的可能重复 【参考方案1】:

int *xp;int xa[4]; 之间最重要的区别是sizeof(xp) != sizeof(xa) 声明对象的大小。

您可以将xa 对象作为int *pparam 传递给函数,但不能将xp 作为int aparam[4] 传递给函数,因为aparam 描述了整个4 个int 对象,而pparam 描述了指向一个可以有任意长度的对象。

同样xa 将保留在链接程序的数据区,而指针malloc(sizeof(int)*4) 将在运行时和堆上由系统调用分配。在调试器中检查巨大的地址差异!

【讨论】:

啊.. 是的.. sizeof()。我忘记了。当然sizeof(xp[0]) == sizeof(xa[0])。你也让我把它们作为参数传递给函数。点赞。【参考方案2】:

嗯,有很多不同。

这会在堆上分配一个int 的缓冲区...

int *x;
x = (int*)malloc(sizeof(int));

这会在堆栈或全局内存中分配一个由四个 ints 组成的数组,或者如果它出现在结构或类的定义中,则可能将其声明为结构或类的成员......

int x[4];

除了分配的位置,第一个分配的空间用于一个int,第二个分配的空间用于四个ints。但假设你打算这样做......

int *x;
x = (int*)malloc(sizeof(int) * 4);

...那么在这种情况下,两个分配都是一块内存,其大小是您平台上int 大小的四倍。从使用的角度来看,您可以以几乎相同的方式使用它们;在任何一种情况下,x[0] 都是第一个 int,并且由于两者都没有声明为 const,因此您可以以相同的方式读取或写入其中任何一个。

所以现在我们来了解分配内存的两种不同方式在分配特征和生命周期方面的差异:

malloc()'ed 的情况下,该请求的内存是在堆上分配的,无论您希望保留它的生命周期有多长,直到您对其调用free() 为止。在另一种情况下,如果您将其声明为方法/函数内的局部变量,则它的生命周期是直到程序执行退出声明它的范围。如果你将它声明为一个全局变量,它的生命周期就是整个应用程序的生命周期。如果你将它声明为结构或类的成员变量,那么它的生命周期就是它的封闭结构/类的生命周期,无论它可能是什么。

【讨论】:

以上是关于sizeof(int)=啥?的主要内容,如果未能解决你的问题,请参考以下文章

“new int[5]”和“malloc(5 * sizeof(int))”在 C++ 中有啥区别? [复制]

sizeof(int)=啥?

#define _clr(x) memset(x,0xff,sizeof(int)*n) 是啥意思?

请问matlab中的fread(fid,19,'int');和c语言中的fread(fid,sizeof(int),19,ch)有啥区别啊

C语言中,sizeof运算符有啥作用?

c语言中,为啥在64位系统中long跟指针的大小是8,而32位的却是4?是啥导致不一样?求详细解答