linux C下是不是不能直接给一个地址指针赋值?

linux C下是不是不能直接给一个地址指针赋值?,第1张

我不知道怎么理解你的话。我可以理解几种:

1.我有个一个指针,我把值赋值到这个指针指向的内存中去,这个毋庸置疑是可以的。例如:int * a = (int *) malloc (sizeof(int))(*a) = 1没有任何问题。

2.我有一个指针,我要改变这个指针的地址。例如:int * a, b, ca = &ba = &c这个也是可以的。

3.我估计你要问的是这个,int * aa = 2000这里的2000是地址,这么做没有任何问题,因为你可以看的出来他和2的情况是一模一样的,只不过2里面是取c的地址给了a,这里是你自己制定确切的地址给a.但有一点要注意,2000是你给的,不是 *** 作系统给的,没人能够保证2000能够进行地址映射到达一个可用的内存。所以在接下来的 *** 作中,没人能保证对a所指向的内存进行 *** 作能够成功。原因因为,地址印射中会对你的2000印射执行权力检测,这是由 *** 作系统和硬件CPU还有8259A芯片共同完成的,你能不能够通过这个检测到达内存是个问题。

最后给你补充个代码:

int * a

int b = 1

printf("%ld\n", &b)

执行完毕后,你就能看到b的逻辑地址,它被打印出来了。你直接把这个数字给a,你就会发现它们的效果等同于 a = &b

原因:1.编译后,逻辑地址不会被改变,(逻辑地址不是最后的物理地址,但是在进程中它能够决定最终物理地址,所以不会有问题)。2.b的地址肯定是可用的。

至于2楼所谓的核心态问题,这个是可以的,核心态可以到达任何一个地方的内存,因为它能够通过所有的权利检测,具体细节就比较多了,涉及到硬件和 *** 作系统的内容。(没试过,虽然我写过核心态下的程序).

调用到真正的read函数

这个文件描述结构以及它的openfread是C库函数,

系统调用read会进入内核的sys_read(好像是这个名称),它会调用到系统调用read,close,找到一个文件描述结构,

这个文件描述结构中包含了包括open, close, read, write在内的一系列的函数指针

然后,它就根据函数指针,read,write等函数,

它根据传入的文件描述符


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8316704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存