精华内容
下载资源
问答
  • main函数执行以前

    2011-10-24 09:37:37
    现在最重要的要跟得上潮流,所以套用比较时髦的话,谁动了我的奶酪。谁调用了我的 main?不过作为计算机工作者,我劝大家还是不要赶时髦,今天Java热,明天 .net 流行,什么时髦就学什么。我的意思先花几年把...
    现在最重要的是要跟得上潮流,所以套用比较时髦的话,谁动了我的奶酪。谁调用了我的 main?不过作为计算机工作者,我劝大家还是不要赶时髦,今天Java热,明天 .net 流行,什么时髦就学什么。我的意思是先花几年把基本功学好,等你赶时髦的时候也好事半功倍。废话不多说了。
        
        我们都听说过一句话:“main是C语言的入口”。我至今不明白为什么这么说。就好像如果有人说:“挣钱是泡妞”,肯定无数砖头拍过来。这句话应该是“挣钱是泡妞的一个条件,只不过这个条件特别重要”。那么上面那句话应该是 “main是C语言中一个符号,只不过这个符号比较特别。”
        
        我们看下面的例子:
        
        /* file name test00.c */
        
        int main(int argc, char* argv)
        {
         return 0;
        }
        
        编译链接它:
        cc test00.c -o test.exe
        会生成 test.exe
        
        但是我们加上这个选项: -nostdlib (不链接标准库)
        cc test00.c -nostdlib -o test.exe
        链接器会报错:
        undefined symbol: __start
        
        也就是说:
        1. 编译器缺省是找 __start 符号,而不是 main
        2. __start 这个符号是程序的起始点
        3. main 是被标准库调用的一个符号
        
        再来思考一个问题:
        我们写程序,比如一个模块,通常要有 initialize 和 de-initialize,但是我们写 C 程序的时候为什么有些模块没有这两个过程么呢?比如我们程序从 main 开始就可以 malloc,free,但是我们在 main 里面却没有初始化堆。再比如在 main 里面可以直接 printf,可是我们并没有打开标准输出文件啊。(不知道什么是 stdin,stdout,stderr 以及 printf 和 stdout 关系的群众请先看看 C 语言中文件的概念)。
        
        有人说,这些东西不需要初始化。如果您真得这么想,请您不要再往下看了,我个人认为计算机软件不适合您。
        
        聪明的人民群众会想,一定是在 main 之前干了些什么。使这些函数可以直接调用而不用初始化。通常,我们会在编译器的环境中找到一个名字类似于 crt0.o 的文件,这个文件中包含了我们刚才所说的 __start 符号。(crt 大概是 C Runtime 的缩写,请大家帮助确认一下。)
        
        那么真正的 crt0.s 是什么样子呢?下面我们给出部分伪代码:
        
        ///
        section .text:
        __start:
        
         :
         init stack;
         init heap;
         open stdin;
         open stdout;
         open stderr;
         :
         push argv;
         push argc;
         call _main; (调用 main)
         :
         destory heap;
         close stdin;
         close stdout;
         close stderr;
         :
         call __exit;
        
        
        实际上可能还有很多初始化工作,因为都是和操作系统相关的,笔者就不一一列出了。
        
        注意:
        1. 不同的编译器,不一定缺省得符号都是 __start。
        2. 汇编里面的 _main 就是 C 语言里面的 main,是因为汇编器和C编译器对符号的命名有差异(通常是差一个下划线'_')。
        3. 目前操作系统结构有两个主要的分支:微内核和宏内核。微内核的优点是,结构清晰,简单,内核组件较少,便于维护;缺点是,进程间通信较多,程序频繁进出内核,效率较低。宏内核正好相反。我说这个是什么目的是:没办法保证每个组件都在用户空间(标准库函数)中初始化,有些组件确实可能不要初始化,操作系统在创建进程的时候在内核空间做的。这依赖于操作系统的具体实现,比如堆,宏内核结构可能在内核初始化,微内核结构在用户空间;即使同样是微内核,这个东东也可能会被拿到内核空间初始化。
        
        随着 CPU 技术的发展,存储量的迅速扩展,代码复杂程度的增加,微内核被越来越多的采用。你会为了 10% 的效率使代码复杂度增加么?要知道每隔 18 个月 CPU 的速度就会翻一番。所以我对程序员的要求是,我首先不要你的代码效率高,我首先要你的代码能让 80% 的人迅速看懂并可以维护。

    总结:

    main函数执行之前,主要就是初始化系统相关资源:

    1.设置栈指针

    2.初始化static静态和global全局变量,即data段的内容

    3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容

    4.运行全局构造器,估计是C++中构造函数之类的吧

    5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数
    展开全文
  • 在默认情况下,这个文件里面记录的仅仅命令本身,不包含命令执行的具体时间。但是出于安全考虑,如何记录并查看以前执行的命令的具体时间呢? AIX 5.3引入了一个新的环境变量:EXTENDED_HISTORY=ON 当这个环境变量...

    每个用户的$HOME目录下面有 .sh_history,里面记录了用户以前曾经执行过的命令。在默认情况下,这个文件里面记录的仅仅是命令本身,不包含命令执行的具体时间。但是出于安全考虑,如何记录并查看以前执行的命令的具体时间呢?
    AIX 5.3引入了一个新的环境变量:EXTENDED_HISTORY=ON
    当这个环境变量设置以后,.sh_history文件中不但记录命令本身,而且记录命令执行的具体时间。所以
      
    建议将:
    export EXTENDED_HISTORY=ON
    这一行写入 /etc/profile 文件中。当需要查看历史记录的时候,可以使用fc -t命令。下面是一个例子
      

    # fc -t
    16 ? :: lssrc -s snmpd
    17 ? :: cd etc
    18 ? :: more snmpd.conf
    19 ? :: fc -t
    20 ? :: export    EXTENDED_HISTORY=ON
    21 2007/04/16 10:44:05 :: ls
    22 2007/04/16 10:44:07 :: fc    -t
      
    从以上例子可以看到,在输出EXTENDED_HISTORY之前,
    .sh_history文件没有记录命令的执行时间,所以对应位置显示的是?,在输出该变量以后,对应位置变成了具体的时间。

     

    展开全文
  • VS2013 我建了个名为 test 的工程,以前单击执行出现text.exe,现在却总是弹出cmd.exe窗口,结果也对。什么设置被改了么?
  • 这几天写java实验,出现了好几次这个问题,无法运行刚写的这个程序,如果把之前写的关掉就说无程序可运行,前几次都莫名其妙又好了,今天又一次……心塞 ------------------------------------------------------...

       这几天写java实验,出现了好几次这个问题,无法运行刚写的这个程序,如果把之前写的关掉就说无程序可运行,前几次都是莫名其妙又好了,今天又一次……心塞

    --------------------------------------------------------------------

    各种百度后找到了下面几种解决方法:

    1. Project-build automatical 打勾
    2. Window-Preferences-General-Workspace-右侧的“Save automatical before build” 打勾
    3. Window-Preferences-Run/Debug-Launching-右侧的“Save required dirty edits before launching”下的“Always”打勾
    4. 在自己代码的任意一个不影响的位置写上
      System.out.println("XXX");

      然后保存运行,然后就好了……

    (吐槽:一般最后一个最好用

    展开全文
  • main函数执行之前,主要就是初始化系统相关资源: 1.设置栈指针 2.初始化static静态和global全局变量,即data段的内容 3.将未初始化部分的全局变量赋初值:数值型short,int,long等为0,bool为FALSE,指针...

    main函数执行之前,主要就是初始化系统相关资源:

    1.设置栈指针

    2.初始化static静态和global全局变量,即data段的内容

    3.将未初始化部分的全局变量赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容

    4.运行全局构造器,估计是C++中构造函数之类的吧

    5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数


    (1)全局对象的析构函数会在main函数之后执行; 

    (2)可以用_onexit 注册一个函数,它会在main 之后执行; 

    如果你需要加入一段在main退出后执行的代码,可以使用atexit()函数,注册一个函数。 
    语法: 
    #include <stdlib.h> 
    #include <stdio.h>

    int atexit(void (*function")(void)); 
    void fn1( void ), fn2( void ), fn3( void );

    int main( void ) 

        atexit(fn1); 
        atexit( fn2 ); 
        printf( "This is executed first.
    " ); 
    }

    void fn1() 

        printf( " This is
    " ); 
    }

    void fn2() 

        printf( " executed next." ); 
    }

    结果: 
    This is executed first. 
    This is executed next.


    展开全文
  • 2. Shell如何执行命令 请点评 ...2.1. 执行交互式命令 请点评 ...用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于...以前学过的cd、alias、umask、e
  • oracle查询某张表重建以前的记录操作(如能找到哪台机器执行的更好) 需求: 开发下午反馈测试环境有一张表不知道谁动过导致数据变了,然后他们十一点多的时候把表重建了; 但他们想知道重建表之前谁动过这张表(猜测...
  • ThreadPoolExecutor怎样执行任务的

    千次阅读 2018-03-16 23:06:59
    早上8点半上班,下午5点半下班,和以前的作息规律有点不一样,逐渐适应,调整,然后还得把跑步这项运动坚持下来。 这篇文章(一天写不完)探索一下Java中的ThreadPoolExecutor的使用,感觉还是挺重要的。如果出去...
  • 以前有句话说:“Java解释执行的 ” 。现在看来确实不是很准确,至于原因,在此简略解释: 首先,我们先解释一下在Java中解释执行和编译执行的区别。  解释执行:将编译好的字节码一行一行地翻译为机器码执行...
  • 最近在读java深度历险这本书,书中第二章有个关于静态块执行时机的讨论,这一改我以前的认知啊。 很多博客或是书籍都认为静态块类加载的时候执行的,真相真的这样么? 我们先来看两个例子: example 1:  ...
  • 我们可以通过AsyncTask.execute()方法来调用,系统默认的线程池来处理当前的任务,系统默认的线程池用的是...2.3平台以前是所有的任务并发执行。 AsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)你也可
  • catch之后代码的执行顺序怎样的

    千次阅读 2018-10-23 11:30:30
    今天在看以前项目时,看到一段代码,大致流程如下:对数据进行入库操作,如果发生异常捕捉,在处理完异常之后还有一段容错处理。在印象中,程序出现异常如果没有捕捉则会直接终止,捕捉则在catch处理完之后,如果有...
  • 关于这个文章的问题早就想问了的,但是以前一直基础不够,弄不明白.为什么我们见到的东西能够跟二进制联系起来。这学期刚好学了体系结构,也看CSAPP,总算可以说是算比较清楚的理解了程序从编译到运行的整个过程的了....
  • javaScript执行上下文

    2021-04-16 13:31:39
    一、执行上下文什么? 执行上下文用大白话来说也就是代码在被解析以前或者在执行时候所处的环境 二、执行上下文分类 , 执行上下文分为全局执行上下文,函数执行上下文, Eval(不常用,不做过多解释): 1.全局执行...
  • 特别提出一点, 触发事件并执行事件处理函数一个同步过程,不是异步过程. 所以事件机制并不是异步的.如果你对这句话,有疑问, 请自行编写代码验证,以前我总认为事件机制异步的, 但不是, 如下所示, [/size] [code=&...
  • DBeaver执行SQL脚本

    万次阅读 2019-12-04 17:35:22
    DBeaver最近才使用,以前使用的PL/SQL,有些不是很熟悉,记录下来,怎么执行脚本的过程。 我连接的的Oracle 11g的数据库,首先把要下载的sql文件准备好。 然后打开DBeaver 选中要执行的数据库: 然后选择要执行...
  • 以前有句话说:“Java解释执行的 ” 。现在看来确实不是很准确,至于原因,在此简略解释: 首先,我们先解释一下在Java中解释执行和编译执行的区别。 解释执行:将编译好的字节码一行一行地翻译为机器码执行。 ...
  • 以前的文章中,关于/index.php我们已经分析完了 $mainframe->dispatch()引入了组件,并被执行。我们知道对于Joomla,一个页面只能有一个或者0个组件,而上,下左右的碎片都module,module页面丰富的有效补充。...
  • 以前没有遇到过这种问题。 后来请教大神,他说,这因为,通过springMVC注入的时候,判断,输入的,和接收的参数不一致, 所以直接报错,便没法执行controller中的方法。 点击按钮的时候,相应ajax事件。直接...
  • 由于项目使用的grunt以前配置的任务执行顺序执行concat,再执行sass,但是现在需要合并css文件,即需要先执行sass编译scss为css,再执行concat合并css文件,所以需要更改grunt执行任务的顺序,更改以下的代码 ...
  • 以前网上搜,今天想自己撸一把。话不多说请看逻辑: 1.我要的功能button基本都有所以直接继承button 2.主要重写onTouch方法,监听按下和抬起两个动作 3.按下时启动线程,在线程中判断时间长短决定是否执行连续...
  • 以前好好的,现在 非要加exe才能执行, 如: D:\soft>java 'java' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 D:\soft>java.exe Usage: java [-options] class [args...] (to execute a class) ...
  • 因为调试时会自动对Local/Watch等窗口里面(或鼠标停留所在)的变量求值,为了防止用户写的程序错误(比如死循环),系统有一个超时限制, 如果某个属性的get中做了很复杂的操作(而不是简单地返回一个...
  • Oracle执行计划变更

    千次阅读 2018-11-21 16:33:27
    Oracle的CBO模式会根据字段的取值比重调整对应的执行计划,无论如何,都会选择成本值最低的一个执行计划,这也CBO优于以前RBO的地方,这里仅用于实验,因为一般OLTP的应用会使用绑定变量的写法,不会像上面这种...
  • 批量执行sql

    2014-04-12 09:15:17
    JDBC的批量处理语句包括下面两个方法: addBatch(String):添加需要批量处理的SQL语句或是参数; executeBatch();...针对第一种情况我们以前的做法可能创建多个Statement,然后挨个execute,或者干脆写个P
  • redis执行失败后的处理

    千次阅读 2020-10-22 01:31:28
    以前工作那会儿,总是在很纠结redis执行失败了怎么处理。最主要的两个问题 redis执行失败了怎么处理程序? redis事务中间有一条或者某几条数据执行失败了怎么处理?特别redis事务,一直强调redis事务执行的...
  • 利用Command创建执行SQL语句的模块

    千次阅读 2013-09-22 19:20:17
    最近两天开始为机房收费系统编写代码了,在机房收费系统中,最核心的代码就是...Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset '本函数的功能是执行SQL语句,并返回结果
  • 以前的老版本GCC默认生成的ELF 64-bit LSB executable格式,后来到了新版本后生成的ELF 64-bit LSB shared object版本,这个格式最新Linux里采用的一些执行格式,但是目前很多发行版的桌面资源管理器不认,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,835
精华内容 5,134
关键字:

以前是执行