为什么默认情况下int分配8字节?

huangapple go评论68阅读模式
英文:

Why int allocates 8 bytes by default?

问题

在尝试在C++中分配内存时,默认情况下分配了8字节,而我预期分配4字节。

#include <iostream>

using namespace std;

int main(){
    int* arr = new int;

    cout << "arr " << sizeof(arr) << endl;

    cout << "int16 " << sizeof(int16_t) << endl;
    cout << "int32 " << sizeof(int32_t) << endl;
    cout << "int64 " << sizeof(int64_t) << endl;
}

这是结果:

arr 8
int16 2
int32 4
int64 8
英文:

when I try to allocate memory in c++ it allocates 8 bytes by default I expected 4;

#include&lt;iostream&gt;

using namespace std;

int main(){
    int* arr = new int;


    cout &lt;&lt; &quot;arr &quot; &lt;&lt; sizeof(arr)&lt;&lt;endl;

    cout &lt;&lt; &quot;int16 &quot; &lt;&lt; sizeof(int16_t)&lt;&lt;endl;
    cout &lt;&lt; &quot;int32 &quot; &lt;&lt; sizeof(int32_t)&lt;&lt;endl;
    cout &lt;&lt; &quot;int64 &quot; &lt;&lt; sizeof(int64_t)&lt;&lt;endl;
}

this is a result:

arr 8
int16 2
int32 4
int64 8

答案1

得分: 2

sizeof(arr)int* 的大小。你很可能正在编译/执行 64 位架构,所以指针的大小为 8 字节。

sizeof(*arr) 的解引用打印出了预期的 int 大小,即 4

英文:

sizeof(arr) is the size of the int*. You're most likely compiling/executing for a 64bit architecture, so pointers are 8 bytes in size.

Dereferencing like sizeof(*arr) prints the size of int which is 4 as expected

huangapple
  • 本文由 发表于 2023年2月6日 17:33:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/75359515.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定