听说的一道google面试题
1)堆与栈的区别?
2)如何判断栈分配内存的方向(向上/向下)
3)如何最快的判断栈的容量(不要用递归和循环)
[解决办法]
2)用函数,返回函数内的局部变量地址,和发起调用的函数内局部变量地址比较
3)这个只想出这一个方法,windows下,读取可执行文件格式里有“保留堆栈大小”的属性,应该可以判断栈的容量
[解决办法]
楼主可有更好的答案?
[解决办法]
1、栈,先进后出,这是主要区别。栈用于函数内临时变量,堆用于动态分配内存。
2、用函数,同上
3、等待答案。
[解决办法]
1.堆是扔个东西进去或者取出来就要重排序放好的,栈是只能扔在上面从上面取的~
2.push个东西进去再看内存新地址和原地址(前提是能直接访问内存...,不同的编程语言有规定各自标准库实现栈的方向,这个要看编程语言的文档)
3.定义栈的时候应该要定义栈的当前length和每单位大小的,乘下
[解决办法]
1. 栈是数据的存取方法,先进后出;堆是数据的排列方法,用2叉树定义就是,子节点都必须大于(或都小于)父节点。堆和栈说的是两码事。
2. 函数,同上的上
3. 那要看用什么存储方式了,如果用数组(或其他静态的连续的存储方式)存储数据,最大容量你定义多少就是多少,要得到已用的容量,用尾地址减首地址在加1就是了;用链表(或其他动态的非连续的存储方式),最大容量就是就是程序自己定义的,或系统定义的,要得到已用的容量,除非是定义了指针数组(或有能替代的、连续性的类等来定义),指向各个节点,用指针的个数乘以节点的容量,否则应该必须用到循环或递归。