花了不少时间写一个滤波的算法,通过将单片机的代码迁移到Visualstudio中调试发现,C++和C函数居然默认是按地址传递!
数值值传递的方法是将数组复制一份,复制所得的数组将被存放在栈中,初始数组的拷贝需要占用额外的内存空间(栈中的内存),需要完整地复制初始数组并将这份拷贝存放到栈中,这将耗费相当可观的运行时间,因而值传递方式的效率比较低。
于是我用手动创建了一个副本,比较愚笨的解决了这个问题,如有更好意见请留言告知…
附上Visual studio中调试代码:
#include "stdafx.h"
#include
void byval_func(int[]);
int _tmain(int argc, _TCHAR* argv[])
{int x[10];int y;for (y&#61;0; y<10; y&#43;&#43;){x[y] &#61; y;printf("%d ", x[y]);}printf("\n");byval_func(x);for (y&#61;0; y<10; y&#43;&#43;){printf("%d ", x[y]);}printf("\n");getchar();return 0;
}void byval_func(int i[])
{int y;for (y&#61;0; y<10; y&#43;&#43;){i[y] &#61; i[y] &#43; 1;printf("%d ", i[y]);}printf("\n");
}