JavaScript的最大函数參数长度和最大栈深度检測

一般代码也许不会涉及最大參数长度和最大栈深度,但某些特殊场合,检測这两个參数还是有必要的。比如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅。又比如:将一串charCode转成String,不了解最大參数长度。採用字符串拼接的方式,效率提不上。特别是在串较长的情况下。

下面两个方法分别实现了JavaScript执行环境的 最大函数參数长度检測 和 最大栈深度检測。

不同浏览器的測试结果不同,同一款浏览器在不同机器測试结果不同。甚至某些浏览器连续測试时先后结果会有不同。

function getMaximumSupportedArgumentsLength(){
	var args={length:0};
	function noop(){}
	function test(n){
		args.length=n;
		try{noop.apply(null,args);}catch(e){return false;}
		return true;
	}
	function getNum(upTo){
		if(test(upTo)){
			return upTo;
		}
		var min=1,max=upTo,mid=Math.floor((min+max)*0.5);
		while(min<max){
			if(test(mid)){
				min=mid;
			}else{
				max=mid;
			}
			mid=Math.floor((min+max)*0.5);
			if(mid==min){
				break;
			}
		}
		return min;
	}
	return getNum(0xFFFFFFFF);
}
function getMaximumCallStackSize(){
	var size=0;
	function test(){
		size++;
		test();
	}
	try{
		test();
	}catch(e){
		return size;
	}
}

//Maximum Supported Arguments Length
//CH34 124782
//FF29 500000
//SF7  65536

//Maximum Call Stack Size
//CH34 20926 in <script>, 20804 in console
//FF29 21###(varies) in <script>, 49993 in console
//SF7  43517 in <script>, 43509 in console
时间: 2024-10-06 05:26:59

JavaScript的最大函数參数长度和最大栈深度检測的相关文章

【通过操作指针,与指针做函数參数&amp;#39;实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换 】

#include<stdio.h> #include<stdlib.h> int strTime(const char *str1, const char *str2, int *time) { int count = 0; char *p1 = str1; char *p2 = str2; //p1是第一次出现的位置 p1 = strstr(p1, p2); //注意这里不要写成*p1!=NULL 由于p1 是null的地址一旦读取*p1 会出错的!!!!不能读取操作系统的数据

JavaScript的最大函数参数长度和最大栈深度检测

也许一般代码不会触及最大参数长度和最大栈深度,但某些特殊场合,检测这两个参数还是有必要的 例如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅 又例如:将一串charCode转成String,不了解最大参数长度,采用字符串拼接的方式,效率提不上,特别是在串较长的情况下 function getMaximumSupportedArgumentsLength(){ var args={length:0}; function noop(){} function test(n){ ar

C语言中的system函数參数具体解释

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,能够直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数运行命令和在DOS窗体中运行命令的效果是一样的,所以仅仅要在运行窗体中能够使用的命令都能够用SYSTEM(

C语言函数參数传递原理

C语言中參数的传递方式一般存在两种方式:一种是通过栈的形式传递.还有一种是通过寄存器的方式传递的. 这次.我们仅仅是具体描写叙述一下第一种參数传递方式,第二种方式在这里不做具体介绍. 首先,我们看一下,以下一个简单的调用例程: int Add (int a, int b, int c) { return a+b+c; } void main() { int x =0 , y = 1, z = 2; int result = 0; result = Add(x, y, z); printf("Re

cmake函数參数解析

近期在迁移公司的make系统到cmake上.发现cmake的function參数非常奇怪.比如,假设我们向一个function传递list作为參数,在function中,形參会变成例如以下状况: set(SRC) list(APPEND SRC a.cpp b.cpp) list(APPEND SRC c.cpp d.cpp) function(tst_arguments src_list) message("src_list = "${src_list}) endfunction()

输入10个数,求出最大元素是第几个数(数组作为函数參数)

小结: 调用有參数的函数时,须要提供实參.实參能够是常量.变量.表达式. 数组元素的作用相当于变量. 数组元素能够作为函数实參,其方法与变量同样.向形參传递数组元素的值.数组名也可作为实參和形參,传递的是数组的首地址. 数组元素能够作函数的实參,可是不能作形參. 由于形參是在函数调用时暂时分配存储单元的.不可能为一个数组元素独立分配存储单元(数组是一个总体,在内存中占连续的一段存储单元).在用数组元素作为函数实參时,把实參传递给形參.是"值传递",数据传递方向是从实參传到形參.单向传递

函数指针作为函数參数,实现冒泡排序的升序排序和降序排序

#include<stdio.h> #define N 10//定义数组元素个数 int Ascending(int a,int b);//升序排列的函数声明 int Descending(int a,int b);//降序排列的函数声明 void swap(int*,int*);//交换数据的函数声明 void BubbleSort(int a[],int n,int (*compare)(int,int));//声明排序函数,通过函数指针作为函数调用 void Display(int a[

[c++]基类对象作为函数參数(赋值兼容规则)

编程处理教师的基本情况. 要求: 1.定义一个"person"类.用来存储及处理人的姓名.性别.年龄,成员函数自定: 2.定义"teacher"类,公有继承"person"类用来存储教师所在学院.所学专业.学历.学位.职称.教龄等,成员函数自定. 3.处理程序,主要包含: ⑴显示姓名.性别.年龄函数:既能显示person对象的姓名.性别.年龄,又能显示teacher对象的姓名.性别.年龄(用person引用对象为形參): ⑵显示教师所在学院.所学

体验函数參数传递

#include <iostream> using namespace std; void fun1(int &x,int &y); void fun2(int *x,int *y); int main() { int a,b; a=11; b=22; fun2(&a,&b); cout<<"a="<<a<<" b="<<b<<endl; fun1(a,b); c