C 执行文件时,内存布局中的文本段会发生什么情况?

C 执行文件时,内存布局中的文本段会发生什么情况?,c,memory,C,Memory,执行文件时,内存布局中的文本段会发生什么情况? 现在执行的代码是否出现在文本段 int A; int myarray[40] = {1,2,3,4}; int f1(int i) { int j = 5; int *p; j += i; p = malloc(sizeof(int)); return j; } void main(){ int k; k = 5; A = f1(k+5); } 文本段包含程序的所有编译机器代码

执行文件时,内存布局中的文本段会发生什么情况?
现在执行的代码是否出现在文本段

int A;
int myarray[40] = {1,2,3,4};
int f1(int i)
{
    int j = 5;
    int *p;

    j += i;
    p = malloc(sizeof(int));
    return j;
}

void main(){
    int k;
    k = 5;

    A = f1(k+5);
}

文本段包含程序的所有编译机器代码,而不仅仅是当前在任何给定时刻运行的代码。除非你正在做一些不寻常的高级事情,如叠加或自修改代码,否则文本段是只读的,在程序运行时不会更改。

文本段包含程序编译的所有机器代码,而不仅仅是在任何给定时刻运行的代码。除非您正在做一些不寻常的高级操作,如覆盖或自修改代码,否则文本段是只读的,在程序运行时不会更改。

这是一个纯粹的技术问题,属于StackOverflow(请不要在那里重新发布,如果有足够多的人投票将其关闭,文本段将自动迁移).我不太明白你的意思。在你的例子中,A不是被分配到5吗?这是为了以某种方式操纵数组吗?“int my array”不是有效的C语言,它不会编译,因此很难说它在运行后会有什么表现。:)这个问题不仅没有意义,而且代码并不是编译一个纯粹的技术问题,这属于StackOverflow(请不要在那里转载,如果有足够多的人投票关闭它,它将自动迁移)。我不确定我是否明白你的意思。在你的例子中,A不是被分配到5吗?这是为了以某种方式操纵数组吗?“int my array”不是有效的C语言,它不会编译,因此很难说它在运行后会有什么表现。:)这个问题不仅没有意义,而且代码也不可编译:)但是,文本段中是否只显示二进制代码?如果执行f1函数,则只显示f1的二进制指令代码?@KayKay:这取决于编译器。在代码段中有字符串文本和常数池是正常的,不确定是否会考虑“二进制代码”。@ Kaykay,是的,只有可执行代码在文本段中。初始化的数据,就像全局数组的内容一样,进入数据段。未初始化的数据,如您的
inta
,将进入BSS段。谢谢:)但是,文本段是否只显示二进制代码?如果执行f1函数,则只显示f1的二进制指令代码?@KayKay:这取决于编译器。在代码段中有字符串文本和常数池是正常的,不确定是否会考虑“二进制代码”。@ Kaykay,是的,只有可执行代码在文本段中。初始化的数据,就像全局数组的内容一样,进入数据段。未初始化的数据,如
inta
,将进入BSS段。