假设T和constT是两种大小相同且对齐方式相同的类型似乎是合理的,但在考虑了一些实际系统之后,似乎它们可能会有所不同。让我解释一下:假设您的系统具有两种类型的内存:RAM和闪存(只读)。RAM是8位可寻址的,而Flash只能是16位可寻址的。假设这是T:structT{uint8_tx;uint16_ty;};在字节可寻址RAM中,该结构体的长度为3个字节......但在双字节可寻址闪存(const变量所在的位置)中,该结构体必须位于由于对齐问题,至少4个字节长。所以这是我的问题:c和c++标准是否保证const和非const类型的大小和对齐方式? 最佳答
我们都知道取消引用空指针或指向未分配内存的指针会调用未定义的行为。但是在传递给sizeof的表达式中使用时的规则是什么?例如:int*ptr=0;intsize=sizeof(*ptr);这也是未定义的吗? 最佳答案 在大多数情况下,您会发现sizeof(*x)实际上根本不计算*x。而且,由于它是调用未定义行为的指针的求值(取消引用),您会发现它基本上没问题。C11标准在6.5.3.4中有这样的说法。sizeof运算符/2(我在所有这些引号中强调):Thesizeofoperatoryieldsthesize(inbytes)ofi
sizeof运算符的返回类型是什么?cppreference.com&msdn说sizeof返回size_t。它真的返回size_t吗?我正在使用VS2010Professional,并针对x64。intmain(){intsize=sizeof(int);//Nowarningintlength=strlen("Expo");//warningC4267:'initializing':conversionfrom'size_t'to'int',possiblelossofdatareturn0;}我有这个问题是因为第一行没有发出任何警告,而第二行却发出了警告。即使我将其更改为char
sizeof和alignof有什么区别?#include#defineSIZEOF_ALIGNOF(T)std::cout会输出1/11/12/22/24/44/44/44/44/48/88/88/8我想我不明白对齐是什么...? 最佳答案 嗯,“内存”基本上是一个巨大的字节数组。然而,像整数这样较大的东西需要超过1个字节来存储它们——例如,一个32位的值将使用4个连续字节的内存。现在,您计算机中的内存模块通常不是“字节”;它们也以“并行”的几个字节组织,例如4个字节的block。对于CPU,在读取诸如整数之类的内容时,不“跨越”此
以下代码#includeusingnamespacestd;intmain(){constchar*constfoo="f";constcharbar[]="b";cout输出sizeof(stringliteral)=2sizeof(constchar*const)=4sizeof(constchar[])=2在32位操作系统上,使用GCC编译。sizeof为什么要计算字符串字面量(所需空间)的长度?当给sizeof时,字符串文字是否具有不同的类型(来自char*或char[])? 最佳答案 sizeof("f")必须返回2,一个
来自[5.3.3/1],我发现:The sizeof operatorshallnotbeappliedtoanexpressionthathasfunctionorincompletetype来自[3.9/5]我发现:Incompletely-definedobjecttypesand cvvoid are incompletetypes无论如何,对于sizeof不评估它的操作数,我会说sizeof(void())是一个合法的表达式(实际上是GCC编译它和结果是1)。另一边,来自here,在讨论sizeof时没有提到void,既没有提到大小为1的类型,也没有在具有实现定义的列表中大小
例如此代码片段的结果取决于哪台机器:编译器机器或机器可执行文件工作?sizeof(shortint) 最佳答案 sizeof是编译时运算符。 关于c++-C++中的sizeof是在编译时还是运行时评估的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2615203/
我在看问题Singlequotesvs.doublequotesinCorC++.我无法完全理解给出的解释,所以我编写了一个程序:#includeintmain(){charch='a';printf("sizeof(ch):%d\n",sizeof(ch));printf("sizeof(\'a\'):%d\n",sizeof('a'));printf("sizeof(\"a\"):%d\n",sizeof("a"));printf("sizeof(char):%d\n",sizeof(char));printf("sizeof(int):%d\n",sizeof(int));ret
阅读以下标准段落:[C++11:5.3.3/6]:Theresultofsizeofandsizeof...isaconstantoftypestd::size_t.[Note:std::size_tisdefinedinthestandardheader(18.2).—endnote]现在:[C++11:18.2/6]:Thetypesize_tisanimplementation-definedunsignedintegertypethatislargeenoughtocontainthesizeinbytesofanyobject.当然,这篇文章不需要size_t是用typede
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:sizeofint,long,etcDoesthesizeofanintdependonthecompilerand/orprocessor?Whatdecidesthesizeofaninteger?我使用的是64位机器。$uname-mx86_64$file/usr/bin/file/usr/bin/file:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.32,s