小编Jul*_*les的帖子

Java“ Foo f = new Foo()”中的对象初始化与使用malloc作为C语言中的指针是否基本相同?

我试图了解Java中对象创建背后的实际过程-并且我想使用其他编程语言。

假定Java中的对象初始化与对C中的结构使用malloc相同是错误的吗?

例:

Foo f = new Foo(10);
Run Code Online (Sandbox Code Playgroud)
typedef struct foo Foo;
Foo *f = malloc(sizeof(Foo));
Run Code Online (Sandbox Code Playgroud)

这就是为什么说对象位于堆而不是堆栈上的原因吗?因为它们本质上只是数据指针?

c java memory memory-management object

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

如果两个指针指向同一个内存地址,是只需要使用free(ptr)一次还是两次呢?

假设我们有一个结构...

struct node{
    int data;
    struct node *next;
};

struct node *new_node = malloc(sizeof(node));

struct node *temp_node = new_node;

Run Code Online (Sandbox Code Playgroud)

如果我使用免费...

free(temp_node);
Run Code Online (Sandbox Code Playgroud)

new_node 也释放(因为地址不再存在)还是 new_node 简单地指向 NULL(在这种情况下我也需要释放 new_node)?

干杯!

c memory malloc pointers memory-leaks

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

物理上靠近 CPU 的内存会比物理上远离 CPU 的内存执行得更快吗?

我知道考虑到计算机的工作速度,这听起来可能是一个愚蠢的问题,但是说 RAM 中的某个地址在物理上更靠近主板上的 CPU,与位于尽可能远离 CPU 的内存地址相比,与最远的内存地址相比,这对访问较近的内存地址的速度有影响吗?

memory cpu performance ram cpu-architecture

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

为什么 Java 函数能够返回本地数组?

我注意到的一些事情:例如,在 C 中,如果您在函数中有一个本地数组

*int returnArr() {
    int arr[5] = {0};
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

显然这不会编译。C 会告诉你你正在尝试返回一个局部变量。然而在 Java 中,同样可以做到......

int[] returnArr() {
    int[] arr = new int[5];
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

它不会引起任何问题?为什么是这样?为什么Java可以,而C不行?

c java arrays stack return

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

为什么我可以像这样将新字符串重新分配给C中的char指针(ch * string =“ hello”; string =“ assign”;)

我想知道以下代码为何合法

char *string = "hello";
string = "changed";
string = "changed again";
Run Code Online (Sandbox Code Playgroud)

这不会对编译器造成任何问题。

但是我给人的印象是,初始化为指针的char数组(char * string与char string []相对)是只读的,不能被覆盖吗?

c arrays string pointers variable-assignment

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