相关疑难解决方法(0)

include_bytes 的运行时成本是多少!或包含_str?

include_bytes!include_str!宏看起来像一个谜给我。我知道该文件包含在二进制文件中,但它在运行时如何工作?

  1. 文件什么时候加载到内存中?
  2. 是否有任何理由不将include_bytes!/的结果存储include_str!为顶级const?文件会在应用程序运行的整个持续时间内都在内存中吗?
  3. 除了二进制大小之外,包含“大”文件是否有任何处罚?

rust

2
推荐指数
1
解决办法
515
查看次数

为什么局部静态变量是 BSS 段的一部分?

静态内存布局的 BSS 部分[应该]用于“未初始化的全局变量”或“全局变量设置为 0”。

\n

我正在运行一些测试,突然注意到局部静态变量也在增加 BSS 段的大小。

\n

例子 :-

\n

在任何静态变量之前

\n
int main (int argc, char argv[])\n{\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n
data/repos/e-c \n\xe2\x9d\xaf size a.out \n   text   data     bss     dec     hex  filename\n   1418    544       8    1970     7b2  a.out\n
Run Code Online (Sandbox Code Playgroud)\n

静态变量之后

\n
int main (int argc, char *argv[])\n{\n    static int a, b, c;\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n
data/repos/e-c \n\xe2\x9d\xaf !s\nsize a.out \n   text   data     bss     dec     hex  filename\n   1418    544      16    1978     7ba  a.out\n
Run Code Online (Sandbox Code Playgroud)\n

这些变量肯定不是全局变量,那为什么BSS段会增加呢?或者“未初始化的全局变量的段”的想法不完全正确?

\n

目前我使用的是 …

c c++ gcc

2
推荐指数
1
解决办法
1818
查看次数

基本的c问题-在c中声明静态变量时会发生什么?

我正在尝试学习在给定函数中定义静态变量时在c中如何工作。例如,当我编写以下代码时:

#include <stdio.h>
void inc() {
  static int c = 0;
  c++;
  printf("%d\n", c);
}

int main(void) {
  inc();
  inc();
  inc();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期的输出显然是:

1
2
3
Run Code Online (Sandbox Code Playgroud)

在第一次调用该函数时,将定义静态变量c并将其值设为0,这是很合理的。它已递增并打印。但是,在第二次询问inc()为什么要保留整数c而不将其设置为零的情况下,即使代码按字面意思说也是如此static int c = 0;。像第一次调用期间一样,编译器中的哪种机制阻止c将其值设置为零?

c static static-variables

1
推荐指数
1
解决办法
87
查看次数

可以调用C++中的全局变量吗?

所以我正在查看一些旧的C++测试书,我发现其中一个问题的解决方案非常酷!我之前从未见过这种"语法",想问一下是否有人知道它是如何实际运作的,为什么它不被广泛传授!


问题: 将输出提供给以下代码 - >

int g =10; //TAKE NOTE OF THIS VARIABLE

void func(int &x, int y){
    x = x-y;
    y = x*10;
    cout << x << ',' << y << "\n";
}

void main(int argc, char** argv){
    int g = 7;    //Another NOTE
    func(::g,g); // <----- "::g" is different from "g"
    cout << g << ',' << ::g << "\n";

    func(g,::g);
    cout << g << ',' << ::g << "\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

3,30

7,3

4,30

4,3


我的问题是":: :(变量)"语法是如何工作的?它将变量存储在main之外,但存储在哪里(Stack/Heap)?我们可以通过指针更改"全局"变量的值吗? …

c++ variables syntax global

-2
推荐指数
1
解决办法
133
查看次数

选择静态全局.为什么?

以下代码的输出为0.

int account=2;

int main()
{
    static int account;
    printf("%d",account);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么它选择静态变量而不是全局变量?因为我所理解的是全局变量和静态变量都存储在堆中而不是存储在函数堆栈中,对吧?那么它用什么方法来选择一个而不是另一个?

c static global-variables

-3
推荐指数
2
解决办法
602
查看次数

标签 统计

c ×3

c++ ×2

static ×2

gcc ×1

global ×1

global-variables ×1

rust ×1

static-variables ×1

syntax ×1

variables ×1