标签:内存

C语言 – 访问数组越界有多危险?

访问其边界之外的数组有多危险(在C中)?有时候我会从数组外部读取(我现在理解我然后访问我的程序的某些其他部分使用的内存,甚至超出了它)或者我试图将值设置为数组之外的索引。该程序有时会崩溃,但有时只是运行,只会产生意想不到的结果。 现在我想知道的是,这真的有多危险?如果它损坏了我的程序,那就不是那么糟糕了。另一方面,如果它打破了我的程序之外的东西,因为我以某种方式设法访问一些完全不相关的内存,那么它是非常糟糕的,我想。我读了很多“任何可能发生的事情”,“细分可能是最不好的问题”,“你的硬盘可能变成 […]

c语言 – C中的“register”关键字?

什么是register关键字在C语言吗?我已经读过它用于优化,但在任何标准中都没有明确定义。它仍然是相关的,如果是的话,你什么时候使用它? 这是编译器的一个提示,即变量将被大量使用,如果可能,建议将其保存在处理器寄存器中。 大多数现代编译器会自动执行此操作,并且比我们人类更善于选择它们。 令我感到惊讶的是,没有人提到你不能获取寄存器变量的地址,即使编译器决定将变量保存在内存而不是寄存器中。 因此,使用register你什么都不赢(无论如何编译器将决定在哪里放置变量)并失去&操作员  […]

C语言 – 如何在C中确定数组的大小?

如何在C中确定数组的大小? 也就是说,阵列可以容纳的元素数量是多少? 执行摘要: int a[17]; size_t n = sizeof(a)/sizeof(a[0]); 要以字节为单位确定数组的大小,可以使用sizeof 运算符: int a[17]; size_t n = sizeof(a); 在我的计算机上,int是4个字节长,所以n是68。 为了确定数组中元素的数量,我们可以将数组的总大小除以数组元素的大小。您可以使用类型执行此操作,如下所示: int a[17]; size_t n […]

用Java创建内存泄漏

我刚刚接受了一次采访,并被要求用Java创建内存泄漏。毋庸置疑,我对于如何开始创建一个自己而言毫无头绪。 一个例子会是什么? 答案 以下是在纯Java中创建真正的内存泄漏(通过运行代码无法访问但仍保存在内存中的对象)的一种好方法: 应用程序创建一个长时间运行的线程(或使用线程池来更快地泄漏)。 线程通过一个(可选的自定义)ClassLoader加载一个类。 该类分配一大块内存(例如new byte[1000000]),在静态字段中存储对它的强引用,然后将引用存储在ThreadLocal中。分配额 […]