`
frenchmay
  • 浏览: 232638 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

系统级编程1 Peculiarity of real, physical computers.

阅读更多

That a program might run out of memory is one of the simpler ways in which

 the physical nature of execution could affect the way we write programs. 

Often, the effects are more subtle. Consider the following code, 

which is intended to fill an array with integers, starting with zero:

#define ARRAY_SIZE 10

void natural_numbers (void) {
	int i;
	int array[ARRAY_SIZE];
	
	i = 1;
	
	while (i <= ARRAY_SIZE ) {
		printf("%d ",i);
		array[i] = i - 1;
		i = i + 1;
	}
}

 

When invoked, the procedure natural_numbers will never return. That's right,

 never. But it seems pretty harmless, doesn't it? The loop is certainly not an

 infinite loop: its index i starts at 1 and ends at ARRAY_SIZE. 

Briefly, the problem is that the compiler allocates the variable i to a location

 in memory that is right at the end of the memory allocated to array, so that 

setting array[10] has the unintended effect of setting the value of i.

 

  • 大小: 3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics