l*********s 发帖数: 5409 | 1 900k个单词,每个都是一个键。如果不是乱序输入,整个splay树只有一个分枝,很容
易就堆栈溢出了。
改乱序输入单词构建splaytree_map呢,2000个左右的单词没有问题,一超过就挂机了
。都不知道该怎么去debug. :-( |
|
b***i 发帖数: 3043 | 2 我的理解
java是pass by value。所以,传入一个整数作为参数到函数里面是不能改变函数外面
那个 变量的值 的。
而那些复杂的类,传入的是类的地址的值。在这里,类的值就是变量地址的值。因为
java里面不讲地址,但本质上就是堆栈里面的地址。当你传入类变量的地址,当然可以
根据地址改变地址指向的那个数据,但是不能改变该变量本身的地址。这和C语言里面
传入一个指针,可以改变指针指向的数据,但是不能改变指针本身是一样的。 |
|
F*******X 发帖数: 143 | 3 不是大牛,也来吹一吹。我认为架构是需要一定的经验累积和堆栈来呈现,是一种
vision,而精通各种framework和工具也只能算是一种training。framework和工具会日
新月异,层出不穷,怎样才能到精通,就是通了某种,不久其他的又出了。 |
|
z****e 发帖数: 54598 | 4 算法离开了学校之后你就差不多丢掉了
比如工作中大部分时候不用递归,dp也不怎么用
一个递归就有可能造成内存堆栈溢出,谁敢用?
工作中用算法的机会少之又少
尤其是各种tree和linkedlist
最常用的是arraylist和hashmap还有hashset什么
而这些东西的算法又是简单不过的
搞算法的主要是数学系那帮人在弄
比较适合research,但是大部分公司没有这种比较纯粹的research部门
linkedin或者netflix要有这种部门就夸张了
ibm这么大型的机构应该会有,但是工作机会就那么点
可能还不如大学里面发考题的位置多 |
|
N****w 发帖数: 21578 | 5 既然都 gdb 了,看看堆栈里传进来的指针指向啥内容了 |
|
c***h 发帖数: 80 | 6 程序本身的数据段里 (程序有代码段、数据段、堆栈段等segment,可以去查阅汇编语
言的书籍) |
|
c***h 发帖数: 80 | 7 不能从作用域内访问外面是C++的铁律。当然你也可以通过汇编来倒着找堆栈来得到外
面M的值;) |
|
c***d 发帖数: 996 | 8 ☆─────────────────────────────────────☆
dickkie (大红椒) 于 (Sun Oct 28 23:59:16 2007) 提到:
请问在C++中,内存分配是否严格的按照此规矩:
只有用new生成的对象才在堆上,其余的一律为栈上或全局变量区
小弟有此问题,是因为教科书上说动态内存分配即堆,它的好处是能在runtime时才确
定具体需要多少对象然后生成,而动态内存分配是由new来完成,那么在此例子中:
int i;
cin >> i;
if(i==10) {
int i=3;
string str="foo";
}
请问这里if里的i和str是在栈上还是堆上? |
|
l**t 发帖数: 64 | 9 既然你都调试了,为什么不跟进去看看cpu100%时执行的是什么代码,一般跟进去基本
就能知道问题原因
某些linux下能正常运行并不表示程序没问题,因此,这个程序肯定是有问题的
printf的测试不容易看出问题,可能是程序多线程运行共享数据未作保护导致的,也可
能是程序本身内存越界问题,不同的操作系统、编译器对堆栈的设置的大小都是不同的
,使得越界访问造成的后果也不同,当然还有更多的可能性
但是归根结底一句话,你的程序有问题
LAPACK直接用fortran版的不是很好么,C++里也能调用啊,在矩阵传进去前转置一下,
算完后再转置回来就能避免矩阵按行存储和按列存储的差异,而且你在linux下用GCC的
编译器,不同语言交叉编译非常方便啊
我在windows下就用的C++调用fortran版的lapack,用了boost.ublas boost.bindings
lapack atlas,很方便。
有一个奇怪的bug, 在某些
束。我debug的时候发现,在某一
就能顺利执行。
为什么只在某些platform下出为题 |
|
b***y 发帖数: 2799 | 10 ☆─────────────────────────────────────☆
observer (笑看人生) 于 (Sun Jun 10 14:43:21 2007) 提到:
从这个版受益很多,攒人品
尽量用中文,免得google到麻烦
就是那个一个数组3堆栈了,空间复杂度O(1)
闲话少说,上code,
思路很简单,就是两头各一个stack,
第3个stack放中间,浮动的,可以往左、右推
有啥bug随便挑,轻点拍啊
#include
#include
using namespace std;
const int n=3;
int R[3*n];
int TopA = 0, TopB = 2*n - 1, BottomB = 2*n-1, TopC = 3*n -1;
bool IsABFull(){return TopA == TopB + 1;};
bool IsBCFull(){return BottomB == TopC;};
int MoveBLeft()
{
// can not move
|
|
X****r 发帖数: 3557 | 11 没错,实打实的编程就是很好的面试题。
我最近比较常用的面试题就是不用现有库写一个通用的堆栈类,
应该说是不能更简单的题了,但是还是能暴露很多问题。 |
|
X****r 发帖数: 3557 | 12 堆栈上放不下这么大的数组。在数组前加static关键字。
什么 |
|
b***i 发帖数: 3043 | 13 很多人不理解异常,是因为没有进行大规模的程序编写。当你的程序超过一万行,非常
复杂的时候,异常处理就非常方便了。
另外一点,异常并不是系统出错了,而是你自己产生错误信号和抓住错误信号。比如,
你的某个类的虚函数被子类实现了,每个子类都要用throw产生错误信号,而基类
的函数通过try调用子类实现的虚函数,并catch子类产生的错误信号,然后统
一处理。通过这种方式,程序实现了不同于正常return返回的方式,而是通过t
hrow被上面catch住,不用层层返回函数堆栈。错误信号Exception
也是你自己定义的类,其中可以包含所有出错的原因,子类的名字等信息,让错误处理
非常方便。
找几个高手的程序源代码,看明白,修改,就懂了。 |
|
c**b 发帖数: 2999 | 14 其实c++ 的目的还是很明确的.比如helper operators,copy constructors等等,看得出
来c++让程序员自己定义class到自己定义operators.當然,它的堆栈的概念在c语言里就
显得很高妙. 反正看C++的书,很有兴趣. |
|
t****t 发帖数: 6806 | 15 堆栈上溢出了会冲掉返回地址, 堆上溢出有什么用?
至于每次是不是分配不同的地址, 你为什么不写个程序把地址打印出来看看? |
|
a*****a 发帖数: 1429 | 16 那位就瞎掰。还有什么等同于图灵机,一个递归就让编译器忙几个月,逗死了。他不知
道所有电脑语言都是图灵完备的。也显然不知道什么是堆栈,什么是stack overflow. |
|
l********a 发帖数: 1154 | 17
这是从书上看的,说是vector退出code block并不会真正释放内存
需要跟空vector来swap交换,所以才加上去的
我看报错的位置,应该是deallocate的时候出错了,跟swap这句关系好像不大
我每次跟踪调试到那个delete _Ptr那句的时候,就没有上下文了,找不到到底哪里出的
错,但是vs ide的函数调用堆栈前面几个倒都是A **的析构,可能析构A *的时候编译器
需要A *的地址 |
|
X****r 发帖数: 3557 | 18 我很好奇你怎么得出你的结论的。
堆栈的方向是体系结构决定的,不是操作系统决定的。 |
|
w***g 发帖数: 5958 | 19 上次在CS版答应给划重点的,发到这儿算了。我手上是第二版。我觉得转行的没有基础
的看完下面这些(约300页,全书1/3的样子)在算法上基本上能达到科班出身水平。可
以按书本身的顺序看,也可以按下面给出的顺序看。
A. 基本概念
1-3 pp.1-61
B. 基本程序设计方法
穷举法 看眼八皇后问题的接法和产生全排列的方法
贪心法 16.1-16.3 pp.370-393
23.1-23.2 pp.561-580
动态规划 15.1-15.4 pp.323-356
分治法(divide and conquer) 本书没有专门的章节讲这个,需要自己随便上网搜搜。
结合下面章节看
选中位数 9.1-9.3 183-189
快速排序和二分查找
回溯(recursion) 这个是具体的实现方法,可以和上面三类方法结合。书中没有。可以
自己动手编一下算fibonacci数和解Tower of Hanoi问题的算法,体会一下回溯算法的
基本结构。看眼下面的页面
http://en.wikipedia.org/wiki/Memoiz... 阅读全帖 |
|
w***g 发帖数: 5958 | 20 上次在CS版答应给划重点的,发到这儿算了。我手上是第二版。我觉得转行的没有基础
的看完下面这些(约300页,全书1/3的样子)在算法上基本上能达到科班出身水平。可
以按书本身的顺序看,也可以按下面给出的顺序看。
A. 基本概念
1-3 pp.1-61
B. 基本程序设计方法
穷举法 看眼八皇后问题的接法和产生全排列的方法
贪心法 16.1-16.3 pp.370-393
23.1-23.2 pp.561-580
动态规划 15.1-15.4 pp.323-356
分治法(divide and conquer) 本书没有专门的章节讲这个,需要自己随便上网搜搜。
结合下面章节看
选中位数 9.1-9.3 183-189
快速排序和二分查找
回溯(recursion) 这个是具体的实现方法,可以和上面三类方法结合。书中没有。可以
自己动手编一下算fibonacci数和解Tower of Hanoi问题的算法,体会一下回溯算法的
基本结构。看眼下面的页面
http://en.wikipedia.org/wiki/Memoiz... 阅读全帖 |
|
b***i 发帖数: 3043 | 21 假设单片机有16个字节的堆栈,然后函数f, g, h, k,i互相调用,假设调用了17次,那
么返回的时候,
最开始的f地址被最后的函数地址覆盖,返回的时候不就回到错误的地方了? |
|
g****t 发帖数: 31659 | 22 风格这个东西应该是因应用环境而有区别的.
C code有很多是和关键性的硬件相关的,这种情况下,用冗余代码换取极端的robustness
,这个方向肯定是正确的.
tab这个我倒不懂为什么.是不是会让有些分析代码文本,算内存或者算堆栈的工具出错?
at ibm os code base all c code forbids tab.
exception |
|
|
B******k 发帖数: 44 | 24 一个月了,报告一下:
数据结构暂时没有继续学下去,只学了链表和堆栈以及队列,后头的树因为还没用到所
以就还没学。SDL也是边用边学,目前学到这里十八课:
http://lazyfoo.net/SDL_tutorials/index.php
游戏写了四个了,tic-tac-toe,snake,pong以及目前基本写完懒得继续填feature的
breakout。接下来想写的是一个platformer,主要是锻炼以下能力:
读txt格式文件(platformer有关卡的概念了)并将其储存信息合理的读到class中;
简易关卡编辑器,其实就是按照事先想好的格式写txt文件;
学习怎么样读和显示tiles,这个应该不难,但是我琢磨着因为platformer的tiles很多
,我是不是要专门用txt文件存放每个tile的信息(这个目前已经完成,其实很简单,
因为每个tile只有位置和sprite ID这三个信息);
简单的AI,我估计我要学树和寻路了。。。
对了,至今我还没学会怎么样静态编译SDL项目,擦。。。 |
|
a****r 发帖数: 71 | 25 跑matlab做DFS,recursion limit可以设到800,再大就直接crash了,请教怎么能调大
点,看到有人可以设到上万。 |
|
k**********g 发帖数: 989 | 26
http://superuser.com/questions/340239/how-to-increase-stack-siz
Also, try to identify where the stack limit overflow is caused by the C/C++
code or Java code, because their stack limits and usage patterns are
completely different. C/C++ code use the OS thread stack directly; Managed
languages such as .NET (C#) and Java had their own abstractions over OS
thread.
MATLAB itself is implemented using a mixture of C/C++ and Java.
For Java code, increase both the Java stack size and the Java heap size... 阅读全帖 |
|
x****u 发帖数: 44466 | 27 Lisp放入内核态,整个堆栈,虚拟内存机制全都完蛋,放入CPU,流水线,分支预测等
等全都要完蛋。
至于编译质量低下还真不是大问题,现在的编译器前端只管翻译到中间代码,优化,机
器码生成和机器码优化都是统一的。
么? |
|
d***a 发帖数: 13752 | 28 栈数据结构的效率,比程序堆栈的效率高,不用压入返回地址和局部变量。 |
|
c*****z 发帖数: 171 | 29 非法指针出的general protection应该是可以扑捉的, 堆栈溢出就不一定了. |
|
c*****a 发帖数: 1638 | 30 1, aws当然有私有云。amazon可以把你的内部网扩展到aws里(VPN)。事实上,所谓私
有云是个伪命题,除非公司确实足够大,像yahoo、google这样的,还比较有意义,否
则内部租用设备意义不是很大(除非真的有巨大而且不同的研发部门,大量不同的大计
算需求)。
2,aws里面就算是windows也比azure便宜吧?
3,坦率说,云里面,现在只有java有供给。点网也是邪道。
4,你究竟想说啥?
5,别胡说了...
6,嗯,是你孤陋寡闻。
我在的公司是个windows shop的非IT公司。
前两天开会的时候,infra的头做了关于云的报告,半天下来就是一个意思,除了aws,
别的云都是邪道(要知道这个头只会windows,不会linux)。我们基本上属于买得起任
何设备,用得起任何咨询的公司。钱不是问题,但是抛开钱不说,azure和其他的任何
cloud在目前来说都不能和aws比,算上钱就更没别家什么事了。
azure我们也评估了,大概可能把exchange放上去,剩下的就没考虑了。
现在不是java和.net的竞争,是aws和剩下所有人的竞争。aws对azure的优势比... 阅读全帖 |
|
|
N******K 发帖数: 10202 | 32 比如一个类 TestClass
class TestClass
{
int m_value;
std::vector m_DataArray;
// memeber function
}
可以改为:
struct TestClassMemberVarible
{
int m_value;
std::vector m_DataArray;
}
class TestClass
{
std::shared_ptr m_MemberVarible;
// memeber function
void Share(TestClass& InputClass)
}
如果所有的类都这么设计 可以不用写 share_ptr 和 new 直接用堆栈
真正的类成员都在heap 所谓的类只是一个壳子+shared_ptr+函数 这样永远不会形成
shared_ptr 循环引用
也可以建立 一个类的array 类似 存在array的referece
TestClass A;
TestClass B;
... 阅读全帖 |
|
o**o 发帖数: 3964 | 33 这个视频很不好 典型的FP showoff。让初学者以为FP就是内建库函数的one liner. 他
应该介绍怎么实现这样一个库函数。
很多介绍新语言都show off程序短。但实际上程序多少行,语法是否简洁对于一个工程
根本不重要,因为极少的时间是用在打字上。我觉得重要的是容易读懂,容易debug,
编译以后执行效率高。如果只是形式上简洁,但是需要编程的人在脑子里实现堆栈,说
不定跟RPN计算器一样被淘汰 |
|
D***n 发帖数: 6804 | 34 Functional 语言在学术上解决特定问题i可以,在实践中大规模应用不行。这样的语言
严重依赖虚拟机/编译器,因为当前计算机体系结构本质并不是这么设计的:
例如:打印100行Hello world,用如果用汇编语言里面无非就是
1))往ECX 中装入一个100
2)打印hello world
3)ECX减去1
4)测试ECX
5)根据结果跳转(JNZ比如)。
这个和C 里面的For语言对应的很好,一条对一条。而FP呢?如果编译器不够智能地猜
出你要做记数循环,采用递归实现意味着你需要执行100次calling convention (以
X86为例):
1)上级栈地址压栈,设新栈地址
2)参数和返回结果压栈(100, 99,98...)
3)执行函数(函数里一个if statement判断是否到头,再打印Hello world)
4)清理堆栈,返回结果
然后这破事要在栈上搞弄100次。执行效率至少慢了400-1000%(Call/Ret指令很费CPU
周期,而且函数压栈这些都是内存操作),这么差的效率怎么玩I/O? |
|
o**o 发帖数: 3964 | 35 这个视频很不好 典型的FP showoff。让初学者以为FP就是内建库函数的one liner. 他
应该介绍怎么实现这样一个库函数。
很多介绍新语言都show off程序短。但实际上程序多少行,语法是否简洁对于一个工程
根本不重要,因为极少的时间是用在打字上。我觉得重要的是容易读懂,容易debug,
编译以后执行效率高。如果只是形式上简洁,但是需要编程的人在脑子里实现堆栈,说
不定跟RPN计算器一样被淘汰 |
|
D***n 发帖数: 6804 | 36 Functional 语言在学术上解决特定问题i可以,在实践中大规模应用不行。这样的语言
严重依赖虚拟机/编译器,因为当前计算机体系结构本质并不是这么设计的:
例如:打印100行Hello world,用如果用汇编语言里面无非就是
1))往ECX 中装入一个100
2)打印hello world
3)ECX减去1
4)测试ECX
5)根据结果跳转(JNZ比如)。
这个和C 里面的For语言对应的很好,一条对一条。而FP呢?如果编译器不够智能地猜
出你要做记数循环,采用递归实现意味着你需要执行100次calling convention (以
X86为例):
1)上级栈地址压栈,设新栈地址
2)参数和返回结果压栈(100, 99,98...)
3)执行函数(函数里一个if statement判断是否到头,再打印Hello world)
4)清理堆栈,返回结果
然后这破事要在栈上搞弄100次。执行效率至少慢了400-1000%(Call/Ret指令很费CPU
周期,而且函数压栈这些都是内存操作),这么差的效率怎么玩I/O? |
|
D***n 发帖数: 6804 | 37 Functional 语言在学术上解决特定问题i可以,在实践中大规模应用不行。这样的语言
严重依赖虚拟机/编译器,因为当前计算机体系结构本质并不是这么设计的:
===============================
例如:打印100行Hello world,用如果用汇编语言里面无非就是
1))往ECX 中装入一个100
2)打印hello world
3)ECX减去1
4)测试ECX
5)根据结果跳转(JNZ比如)。
这个和C 里面的For语言对应的很好,一条对一条。而FP呢?如果编译器不够智能地猜
出你要做记数循环,采用递归实现意味着你需要执行100次calling convention (以
X86为例):
1)上级栈地址压栈,设新栈地址
2)参数和返回结果压栈(100, 99,98...)
3)执行函数(函数里一个if statement判断是否到头,再打印Hello world)
4)清理堆栈,返回结果
然后这破事要在栈上搞弄100次。执行效率至少慢了400-1000%(Call/Ret指令很费CPU
周期,而且函数压栈这些都是内存操作),这么差的效率怎么玩I/O?
除... 阅读全帖 |
|