I would say that there is no difference. Each function has a memory area associated. It is allocated into the stack when the function starts and deallocated when it ends. The compiler is smart enough to use the same stack memory address each loop. In the end, each loop is part of the same function.

Code:
int _i = 0;
for ( ; _i<10; _i+=1 )
{
	var _a = 1;
	long *_aP = &_a;
	printf ( "%i", _aP );
}



Originally Posted By: wikipedia

In most modern computer systems, each thread has a reserved region of memory referred to as its stack. When a function executes, it may add some of its state data to the top of the stack; when the function exits it is responsible for removing that data from the stack. At a minimum, a thread's stack is used to store the location of function calls in order to allow return statements to return to the correct location, but programmers may further choose to explicitly use the stack. If a region of memory lies on the thread's stack, that memory is said to have been allocated on the stack.

Because the data is added and removed in a last-in-first-out manner, stack-based memory allocation is very simple and typically faster than heap-based memory allocation (also known as dynamic memory allocation). Another feature is that memory on the stack is automatically, and very efficiently, reclaimed when the function exits, which can be convenient for the programmer if the data is no longer required. If however, the data needs to be kept in some form, then it must be copied from the stack before the function exits. Therefore, stack based allocation is suitable for temporary data or data which is no longer required after the creating function exits.