面试中遇到的有趣的小问题

频繁地malloc与free内存会有什么问题

频繁的malloc与free会造成内存碎片化的问题,从而无法进行大容量内存的分配,当然,有的库对此进行了优化,比如glibc,free掉的内存不会立即返还给操作系统,而是先给空闲内存链表,然后当再次进行malloc时会先从空闲内存链表中寻找合适的内存块。可以看看这个:http://www.valleytalk.org/wp-content/uploads/2015/02/glibc%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86ptmalloc%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%901.pdf 当然还可以使用内存池。

如下程序能否运行

demo.h


#include <cstdio>

int main(

demo.cpp

)
{
 printf("hello\n");
 return 0;    
}

答案是能运行,我们需要重新回忆一下C/C++的编译步骤,“首先是预处理阶段,这个阶段,编译器以C文件作为一个单元,首先读这个C文件,发现头文件,就会在所有搜索路径中寻找这两个文件,找到之后,就会将相应头文件中再去处理宏,变量, 函数声明,嵌套的头文件包含等,检测依赖关系,进行宏替换,看是否有重复定义与声明的情况发生,最后将那些文件中所有的东东全部扫描进这个当前的C文件中,形成一个中间C文件”。到这里结果就很清楚了,程序为什么能编译执行

判断链表是否有环

很经典的一道题目,想到了一切好说,想不到就GG,别人已经总结得很好了,我就不再搬一次砖了,请参看: http://blog.csdn.net/thefutureisour/article/details/8174313

猜你喜欢

转载自blog.csdn.net/tjq980303/article/details/78198577