c语言 怎么记录指针所申请内存空间大小
c语言 如何记录指针所申请内存空间大小
如何获得指针申请的内存大小,这个值自己肯定是知道的,但是操作系统是如何得知的,有没有什么数据结构保存着这个数值?
#include <stdio.h>
int main(){
char a[] = "hello world!';
char *p = a;
//*(p+20) = 'z';
printf("%s",p);
return 0;
}
如果加上注释掉的代码的话,接下来打印的就是乱码,这里p相当于申请了13个字节的内存空间,p占4个字节,保存的是'h'的地址,那记录p的指向空间的大小的结构是什么。操作系统是怎么知道p所申请的内存空间大小的。
------解决方案--------------------
建议楼主不要空想
稍微学一下汇编语言,看看你写的代码被编译成了哪些机器命令,就知道空想是多么的无价值了
指针指向内存中的一个位置,这个位置存在或不存在,都和指针没关系
如果你申请了一块内存,那么内存管理机制就会记录下分给你的这块内存的大小及位置。如果指针指向的不是你申请的内存,那么这块内存有谁何时怎么样处理,你都不应该猜想。
char a[] = "hello world!";这条语句定义了一个局部数组,而数组在编译后运行时根本不记录其大小,越界修改将导致修改其他数据从而程序运行出错甚至崩溃,这一切都是程序员自作自受,没有任何安全机制供程序员撒娇。
------解决方案--------------------
你是怎么知道机器知道了指针所指对象的长度?机器完全不知道它所指向对象的长度,只知道指针类型,而这个类型是你声明了的,就这么简单。没有问题了吧?你不信,你随便给指针赋个值完后再访问看看,你的程序肯定死掉,因为程序根本就没有你想像的那样知道它指向了什么,指向的东西有多长。
如何获得指针申请的内存大小,这个值自己肯定是知道的,但是操作系统是如何得知的,有没有什么数据结构保存着这个数值?
#include <stdio.h>
int main(){
char a[] = "hello world!';
char *p = a;
//*(p+20) = 'z';
printf("%s",p);
return 0;
}
如果加上注释掉的代码的话,接下来打印的就是乱码,这里p相当于申请了13个字节的内存空间,p占4个字节,保存的是'h'的地址,那记录p的指向空间的大小的结构是什么。操作系统是怎么知道p所申请的内存空间大小的。
------解决方案--------------------
建议楼主不要空想
稍微学一下汇编语言,看看你写的代码被编译成了哪些机器命令,就知道空想是多么的无价值了
指针指向内存中的一个位置,这个位置存在或不存在,都和指针没关系
如果你申请了一块内存,那么内存管理机制就会记录下分给你的这块内存的大小及位置。如果指针指向的不是你申请的内存,那么这块内存有谁何时怎么样处理,你都不应该猜想。
char a[] = "hello world!";这条语句定义了一个局部数组,而数组在编译后运行时根本不记录其大小,越界修改将导致修改其他数据从而程序运行出错甚至崩溃,这一切都是程序员自作自受,没有任何安全机制供程序员撒娇。
------解决方案--------------------
你是怎么知道机器知道了指针所指对象的长度?机器完全不知道它所指向对象的长度,只知道指针类型,而这个类型是你声明了的,就这么简单。没有问题了吧?你不信,你随便给指针赋个值完后再访问看看,你的程序肯定死掉,因为程序根本就没有你想像的那样知道它指向了什么,指向的东西有多长。