- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
某日二师兄参加XXX科技公司的C++工程师开发岗位第10面:
面试官:了解 sizeof 操作符吗?
二师兄:略微了解(不就是求大小的嘛。。) 。
面试官:请讲以下如何使用 sizeof ?
二师兄: sizeof 主要是求变量或者类型的大小。直接使用 sizeof(type) 或 sizeof(var) 即可.
面试官:嗯。 sizeof(int*) 、 sizeof(int**) 和 sizeof(int[4]) 各返回什么?
二师兄:前两者的返回值相等。在32位操作系统中返回4,64位操作系统中返回8。 sizeof(int[4]) 返回16,是因为 sizeof 运算时数组不会退化为指针.
面试官:如果一个 int* p = nullptr ,那么对其进行 sizeof(*p) 会发生什么?
二师兄:返回4。原因是 sizeof 在编译时求值, sizeof 只需要获取 *p 的类型,并不对 *p 求值。所以不会发生段错误.
面试官:下面三个 szieof 运算符,各返回什么?
#include <iostream>
#include <string>
int main(int argc, char const *argv[])
{
const char* str1 = "hello";
char str2[] = "hello";
std::string str3 = "hello";
std::cout << sizeof(str1) << std::endl;
std::cout << sizeof(str2) << std::endl;
std::cout << sizeof(str3) << std::endl;
}
二师兄:第一个返回4或8,因为它是个指针,第二个是个数组,不过末尾有个 \0 结束符,所以它的值是6,第三个不清楚,但是等于 sizeof(std::string) .
面试官:好的。使用 sizeof 对以下两个结构体求大小, 。
#include <iostream>
struct Foo
{
char c;
int i;
double d;
};
struct Goo
{
char c;
double d;
int i;
};
int main(int argc, char const *argv[])
{
std::cout << sizeof(Foo) << std::endl;
std::cout << sizeof(Goo) << std::endl;
}
二师兄: sizeof(Foo) 应该等于16,而 sizeof(Goo) 应该等于24。因为需要内存对齐.
面试官:好的。那你知内存对齐的原则是什么,为什么要内存对齐?
二师兄:额。。。应该需要以8位对齐吧。。。不是很清楚为什么要内存对齐.
面试官:你知道 sizeof(空结构体) 的结果是多少吗?
二师兄:应该是0吧.
面试官:对只有一个函数的类进行 sizeof 运算结果是多少?
二师兄:应该也是0?
面试官:好的,回去等通知吧.
让我们复盘以下今日二师兄的表现.
内存对齐的原则是什么,为什么要内存对齐?
主要有以下原则:
因为性能。为了缓存友好(Cache friendly)。这是一个很大的话题,咱们今天聊不了太多.
sizeof(空结构体) 的结果是多少?
这里在C中是0,在C++中是1。C++标准规定,不同的对象不能拥有相同的内存地址。 如果空类大小为0,类的对象数组中的每个对象都拥有了相同的地址,这显然是违背标准的.
对只有一个函数的类进行 sizeof 运算结果是多少?
这里也是一个坑。要看这个函数是不是虚函数。如果不是虚函数,则结果是1,如果是虚函数,则大小是4或者8.
聪明的小伙伴,提到4或者8.就应该知道是怎么回事了吧?
好了,今日份面试到这里就结束了,小伙伴们,对于今天二师兄的面试,能打几分呢?如果是你,以上的问题都能回答的上来吗?
关注我,带你21天“精通”C++!(狗头) 。
最后此篇关于C++面试八股文:了解sizeof操作符吗?的文章就讲到这里了,如果你想了解更多关于C++面试八股文:了解sizeof操作符吗?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题已经有答案了: Why isn't sizeof for a struct equal to the sum of sizeof of each member? (13 个回答) 已关闭 8
先生。 Stroustrup 在他的新书(TCPL 第 4 版)第 149 页写下了以下内容 1 N && sizeof(long)<=N任何 N 值的实现,更不用说任何人都会考虑使用 wchar_t
如 [5.3.3/3] 所述(expr.sizeof,工作草案): The sizeof operator can be applied to a pointer to a function, but
从C标准来看,int至少有16bit,long至少有32bit,long long如果有的话至少有64bit(有些平台可能不支持)。只是想知道标题中的句子是否总是正确的。 最佳答案 没有。该标准仅定义
我运行的是 Windows 7(64 位)。 这个问题与此处找到的问题相同: long on a 64 bit machine 但更深入,因为它处理更多的数据类型并适用到 C 或 C++,而不是 C#
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
这个问题在这里已经有了答案: Length of array in function argument (9 个回答) 关闭 9 年前。 #include void printS(char []);
我承认这三个都有不同的含义。但是,我不明白这些具体情况适用于哪些特定情况。任何人都可以分享每个例子吗?谢谢。 malloc(sizeof(int)) malloc(size
To avoid things quietly breaking if you change the array size, I suggest std::copy(a, a + sizeof(a)/
我在 python 中注意到以下事实: >>> (1, 2, 3).__sizeof__() 48 >>> [1, 2, 3].__sizeof__() 64 我理解列表和元组之间的区别,但我希望它们
是否存在与指针大小相同的整数类型?保证所有微架构? 最佳答案 根据 this Wikipedia page ,在 C99 中,您的 stdint.h header 可能声明了 intptr_t 和 u
我注意到 int 和 double 的大小与使用函数 MPI_Type_size(MPI_INT, &MPI_INT_SIZE); 计算的不同。这是否意味着 sizeof(MPI_INT) 返回了错误
这个问题已经有答案了: How to find the size of an array (from a pointer pointing to the first element array)? (
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
我是一名优秀的程序员,十分优秀!