如何编写包含几万个函数的程序?
工作中,我需要使用函数指针数组,函数有几万个,
示例程序大致如下:
#include <stdio.h>void f_00_00(void){printf("00 00\n");}void f_00_01(void){printf("00 01\n");}/* 打印部分只是示范,并不是真的要打印,假设一直这样到…… */void f_ff_ff(void){printf("ff ff\n");}typedef void (* f_t)(void);static const f_t arr[65536]={ f_00_00, f_01_00, f_02_00, f_03_00, /* 一直这样直到…… */ f_fe_ff, f_ff_ff};void main(int argc, char* argv[]){ arr[1](); arr[250](); arr[12345](); return 0;}void f_00_00(void){printf("00 00\n");}void f_00_01(void){printf("00 01\n");}/* 打印部分只是示范,并不是真的要打印,一直这样到 */void f_00_01(void){printf("ff ff\n");}#include <stdio.h>double A[300][100];double valuex[300];double valuey[300];int i;double fun00(double x,double y) {return x + y ;};double fun01(double x,double y) {return x*x+ 3*y ;};double fun02(double x,double y) {return x + 2*y*x;};//... fun03(double x,double y) {return ...+... ;};//...//... fun98(double x,double y) {return ...+... ;};double fun99(double x,double y) {return x/2+20*y ;};double (*funNN[100])(double,double)={ fun00, fun01, fun02,// fun03,// ...// fun98, fun99,};int main() { double x,y; int f,FN; for (i=0;i<300;i++) { valuex[i]=(double)i; valuey[i]=(double)i; } FN=3; for (i=0;i<300;i++) { x=valuex[i]; y=valuey[i]; for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y); } for (i=0;i<3;i++) { for (f=0;f<FN;f++) printf("%lg ",A[i][f]); printf("\n"); } return 0;}//0 0 0//2 4 3//4 10 10
[解决办法]
搞成多个静态库~
[解决办法]
应该会造成堆栈溢出,我们来计算一下,假设C语言中使用32为指针,共4个字节,那么,全部入栈则一共有4*10000=40000B的栈空间将被分配,合计栈空间将损失40000/1024=39K字节,在加上主函数中的其他变量加载和主函数调用函数时的入栈操作,就算可以运行,如果你的函数中还有那么多变量,就会异常,VC++中默认栈空间为1MB,那么如果你的函数每增加一万个,栈空间就损失39K,函数越多,就越有可能溢出,你的默认栈空间为1MB,只要再多损失39KB的栈空间25次,栈空间就会溢出。另外,我很好奇,你到底是什么项目?要几万个函数太夸张了吧?
[解决办法]
好像听说有些编译器单文件不能超过65535行的