1 channeling
int main()
{
DeclareAndInitialArray();
printfArray();
}
void DeclareAndInitialArray()
{
int array[100];
int i;
for (i =0; i<100;i++)
{
array[i] =i ;
}
}
void printfArray()
{
int array[100];
int i;
for(i=0;i<100;i++)
{
printf("%d\n", array[i]);
}
}
以上程序运行输出0-99;因为两个函数在栈中的内存信息完成相同,调用完之后原来的向下栈区空间并没有更新,信息依然存在。
channeling :代码不是顺序执行,每个硬件中断都有执行-利用一小段代码提前准备好信息,下次就知道相应的栈信息中进行操作。以上是利用C中的内存分布进行的操作。这里也提醒了你命名一个局部变量,未进行初始化的后果会出现一些隐藏的bug。
2 printf函数原型
int printf(const char* control, ...);
printf("hello\n");
printf("%d + %d = %d\n", 4 ,4, 8);
如何实现参数的缺省动态。
函数参数从右到左入栈,最顶端的是第一个控制参数。利用第一个控制参数的信息,向上寻址,找到相应参数的预留的内存空间。
但是如果反过来入栈实现起来就比较麻烦。
3 如何让两个不同程序在同一个处理器中同时运行。
每一个应用程序代表一段虚拟内存,里边有栈区, 代码段,以及堆区。每一个虚拟内存映射到物理内存中的一小段中,通过相应的内存管理器实现进行。
同一段进程中如何运行两个函数:通过共享堆区与代码段,而栈区分出子栈区