小编Ram*_*bie的帖子

“T a”、“T a()”和“T a=T()”之间有什么区别,其中 T 是一个类?

T一个C++类。

以下三个指令之间的行为有什么区别吗?

T a;
T a();
T a = T();
Run Code Online (Sandbox Code Playgroud)

为不带参数的构造函数提供显式定义这一事实是否会T改变问题?

后续问题:如果为T至少带有一个参数的构造函数提供定义呢?那么以下两条指令之间的行为是否会有所不同(在本示例中,我假设构造函数仅采用一个参数)?

T a(my_parameter);
T a = T(my_parameter);
Run Code Online (Sandbox Code Playgroud)

c++ constructor class

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

C函数局部变量在函数执行后没有被释放

在下面的 C 程序中,对函数的调用创建了一个相当大的局部变量buf,然后函数返回并且程序处于无限循环中。buf正如人们所预料的那样,在调用该函数时,系统的 RAM 使用量会增加等于 的大小;但是,函数返回后(显示“完成”),RAM 使用量不会下降,而是保持不变。

为什么函数返回后这个堆栈分配的缓冲区没有立即释放?如何制定这种行为的一般行为,并描述在哪些情况下它可能会或可能不会立即释放?

#include <stdlib.h>
#include <stdio.h>

void f()
{
    int buf[1000 * 1000 * 200];
}

int main()
{
    f();
    printf("Done\n");
    for (;;);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

下面是运行程序时的 RAM 使用时间线。 RAM 使用时间线

PS 这是在 Linux Ubuntu 上运行的。

PS 我编译时没有进行编译器优化

PSf以“闪烁”方式调用(重复[开 - 延迟 - 关 - 延迟])而不是一次调用会导致类似的 RAM 使用时间线。

c stack-memory

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

指向 const 的指针:为什么 ptr[1] 也是只读的?

我理解,指向const的指针是一个指针,通过该指针无法更改该指针所指向的变量的值。因此,在下面的示例中,我希望编译器会引发错误:

\n
int main()\n{\n    int a = 42;\n    const int *ptr = &a;\n    ptr[0]++;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

现在,为什么下面的示例也会出现错误?

\n
int main()\n{\n    int a = 42;\n    const int *ptr = &a;\n    ptr[1]++;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

第二个示例(使用ptr[1]++)抛出error: increment of read-only location \xe2\x80\x98*(ptr + 4)\xe2\x80\x99。因此,看起来不仅指针指向的变量的值不能改变,其他相关内存位置的值也不能改变。

\n

与此相关的具体行为是什么?此行为在哪里引用?例如,https://en.cppreference.com/w/c/language/pointer对我来说似乎并不清楚。

\n

c pointers

0
推荐指数
2
解决办法
153
查看次数

标签 统计

c ×2

c++ ×1

class ×1

constructor ×1

pointers ×1

stack-memory ×1