命令行参数,C内存空间布局,库(进程环境)【linux】(zh)

命令行参数

在命令行执行c程序时,可以输入命令行参数并传递给main函数的形参,然后进程就得到了命令行的参数。其实在命令行执行c++、java程序时,也可以使用同样的方法,给进程传递命令行参数。

命令行参数的用处

我们在前面内容,实现了一个my_ls程序,用于模拟ls命令,显示文件属性,执行my_ls时,就需要跟接参数。

所有命令(程序:ls)的选项和参数,都是通过命令行参数得到的,所以对于命令行来说,命令行参数是很有用的。

严格意义来讲,程序和参数都是命令行参数,跟在程序后面的参数实际上是前面程序的参数。
整个一行都是命令行参数,一个程序后面可以跟多个程序的参数。

代码演示
打印命令行参数:

#include <stdio.h>
int main(int argc ,char ** argv)
{
        int i = 0;
        for(i = 0;i<=argc;i++)
        {
                printf("%s",argv[i]);
        }
        printf("\n");

        for(int i = 0;argv != NULL;i++)
                printf("%s",argv[i]);
        printf("\n");

        return 0;
}

第一个参数永远都是程序名。

将命令行参数传递给main函数形参的过程:
在这里插入图片描述

C内存空间布局

程序运行的大致过程

c程序运行时,是运行在内存上的,也就是说需要在内存上开辟出一块空间给c程序,然后将C代码会被从硬盘拷贝到内存空间上运行,至于说是不是将代码全部会被拷贝到内存上,这就不一定的了。有些是全部拷贝,有的是拷贝,当前要运行的那一部分,运行完了再拷贝其它部分当运行有OS,而且OS提供了虚拟内存机制时,基本都是这种的情况。
运行时需要要在内存开辟出一段空间,然后把代码从硬盘拷贝到内存上,那么所开辟出的这段内存空间,就是c程序的内存空间。程序的内存空间。

c程序的内存空间结构

有结构的要求吗?

扫描二维码关注公众号,回复: 9655031 查看本文章

有,这段空间必须布局为c程序运行所需的空间结构,c程序才能运行比如程序在调用函数时需要用到“栈”这个东西,那么就必须在内存空间中构建出“栈”,否者c序程序没办法实现函数调用。
如果空间没有布局好,进程将无法运行,因此进程空间(c程序的内存空间)也是非常重要的进程环境。
这就好比你租了写字楼的某层开了家公司,但是这个空间肯定是需要被布局为你要的结构的,如果空间不布局的话,你公司怎么运作起来。

c的内存结构是谁来构建的?
由启动代码来搭建的,比如启动代码会把c内存空间的某一部分空间,构建为“栈”,也就是说以“栈”的方式来管理这片内存。

c程序的内存空间也其实也叫“进程空间”因为c程序在内存中运行起来后就是进程了,所以c程序的内存空间也其实也叫“进程空间”。

不光是C程序所有超级语言的程序在运行时,都涉及内存空间的结构布局,不过它们的结构都是相似的,理解了C的内存空间布局,自然也理解其他程序的内存空间结构。

c程序代码在内存上运行起来后,它就是一个进程,所以程序代码在内存上所占用的空间,也称为进程空间。c程序空间对于c程序运行非常重要,如果没有在内存中布局出这个空间环境,程序将无法运行起来。

我们写程序时,是绝对不可能从零开始写代码的,都是要依赖被人所写的代码的,比如别人写的库,所以库也是程序非常重要的运行环境,没有库的支持,我们的程序根本做不了重要的事情。有关C语言库这一块,我们也在C语言中做了详细讲解,所以这里将其省略。

发布了163 篇原创文章 · 获赞 94 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43648751/article/details/104452495