c语言之内存扫描

曾经很早的时候学习C语言基础的时候就想过,既然c语言可以不限制指针的使用,那我用一个指针写一个死循环不就可以扫描整个内存了。。。但是显然这个结论是错误的

#include<stdio.h>

 char a;
 char *p=&a;

int main()
{
// 	char a;
// 	char *p=&a;
	int count=0;
	while(1)
	{
		printf("%d   the location is == %o, num == %d\n",++count,p,*p);
		p++;
	}

	return 0;
}

原因我认为应该是c语言为每个函数分配了一个栈空间,如果超过了这个空间就会报错。如果把变量声明到main函数内部,指针指到1031行就报错了【也许不同的编译器和系统结果不同】,但是如果声明到main的外面,就可以指到16064行,这个结果也和上面的结论相一致。

时间: 2024-08-01 22:35:03

c语言之内存扫描的相关文章

C语言中内存分配的问题

问题描述 C语言中内存分配的问题 malloc是memory allocate的缩写,那calloc的全拼是什么? 既然void *malloc(unsigned int size),为什么void类型能返回地址,void 不是无返回值吗? calloc也是这样的问题,求高手解答 解决方案 void指针是什么? void指针一般被称为通用指针或泛指针,它是C关于"纯粹地址(raw address)"的一种约定.void指针指向某个对象,但该对象不属于任何类型.请看下例: int *ip

Go语言共享内存读写实例分析_Golang

本文实例分析了Go语言共享内存读写的方法.分享给大家供大家参考.具体分析如下: 前面分析了Go语言指针运算和内嵌C代码的方法,做了一个Go语言共享内存读写的实验. 先大概说下什么是共享内存.我们知道不同进程见的内存是互相独立的,没办法直接互相操作对方内的数据,而共享内存则是靠操作系统提供的内存映射机制,让不同进程的一块地址空间映射到同一个虚拟内存区域上,使不同的进程可以操作到一块共用的内存块.共享内存是效率最高的进程间通讯机制,因为数据不需要在内核和程序之间复制. 共享内存用到的是系统提供的mm

linux下c语言大内存分配

问题描述 linux下c语言大内存分配 远程登录工作站(64G)c语言分配12G内存失败 代码如下 #include<stdio.h> #include<string.h> #include<malloc.h> int main() { char *x=NULL; x=(char *)calloc(3001*3001*1200,sizeof(char)); if(x==NULL) printf("failed"); else printf("

linux-Linux c语言程序内存占用大,需要注意那些方面来削减内存占用

问题描述 Linux c语言程序内存占用大,需要注意那些方面来削减内存占用 搜索了相关资料都是关于堆栈啊这些资料,感觉无从下手,请高手解答 解决方案 首先是考虑你的思路,看能否精简你的思路,使得代码更高效更简单: 其次是注意释放内存,不再用的及时释放,不多占资源: 再次是检查你的全局变量,少用全局变量可以减少运行时占用的内存: 最后是注意不要大文件一次性加载进内存,简单粗暴的效率低下. 解决方案二: malloc要及时free释放内存 其实就是如果你需要反复申请使用内存,可以考虑利用内存池的概念

c语言-C语言的内存动态分配问题

问题描述 C语言的内存动态分配问题 有一些空闲内存,但是碎片化严重.怎样动态分配内存才能利用他们?(假设需要的空间大于每一个小碎片内存,小于内存之和) 解决方案 不需要管,因为即便内存是连续的,其实那只是逻辑地址的连续,物理地址上看,windows linux都是使用页的,也不是连续的. 操作系统会最优化内存排列的. 解决方案二: 一般是在使用动内存的时候尽量避免这种情况,到了这种时候没想到有什么好方法. 解决方案三: C语言中内存动态分配应注意的问题C语言内存动态分配与释放c与c++分别是怎样

c语言中内存的分配与释放的例子

首先我们来科普一下: 什么是堆?说到堆,又忍不住说到了栈!什么是 栈? 1.什么是堆:堆是大家共有的空间,分全局堆和局部堆.全局堆就是所有没有分配的空间,局部堆就是用户分配的空间.堆在操作系统对进程 初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏. 2.什么是栈:栈是线程独有的,保存其运行状态和局部自动变量的.栈在线程开始的时候初始化,每个线程的栈互相独立.每个函数都有自己的栈,栈被用来在函数之间传递参数.操作系统在切换线程的时候会自动的切换

c语言动态内存分配问题

问题描述 c语言动态内存分配问题 我去杭州海康威视笔试和面试被问的原题: 没有改动一个字符, 5.以下程序有什么问题,请指出. char * getMem() { char *p=malloc(100); return p; } int main(void) { char *p = getMem(); spintf(p,"hello"); free(p); }

对抗杀毒软件的内存扫描_漏洞研究

Author:  Polymorphours Email:   Polymorphours@whitecell.org Homepage:http://www.whitecell.org  Date:    2005-11-17 /*++        Author: PolymorphoursDate: 2005/1/10通过对 NtReadVirtualMemory 挂钩,防止其他进程对保护的模块进行扫描,如果发现其他进程读被保护模块的内存,则返回0--*/typedef struct _L

C语言 动态内存分配的详解及实例_C 语言

1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名.     ①内存分配由编译器在编译期间决定     ②定义数组的时候必须指定数组长度     ③数组长度是在编译期就必须确定的 (3)但是程序运行的过程中,可能需要使用一些额外的内存空间 2. malloc 和 free 函数 (1)malloc 和 free 用于执行动态内存分配的释放 (2)malloc 所分配的是一块连续的内存 (3)malloc 以字节为单位,并且返回值不带任何的类型信息