Tag: 记忆

打印C指针的物理地址

我可以使用以下代码打印指针的地址 #include<stdio. int main(){ int *q =(int*) malloc(4); printf("%x\n",q); } 当我执行以下代码时,将打印hex值。 它是堆上变量q的虚拟地址还是物理地址? 如果它是虚拟的我应该如何打印另一个?

内存没有被释放但仍然可以访问,它是否泄漏?

通过检查valgrind,我看到在终止程序后没有释放5块内存,但它们仍然可以访问。 我需要被它打扰吗? 它是如何发生的? zhanwu@gelata:~/sandbox$ valgrind ./a.out ==2430== Memcheck, a memory error detector ==2430== Copyright (C) 2002-2010, and GNU GPL’d, by Julian Seward et al. ==2430== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info ==2430== Command: ./a.out ==2430== Hello world! Thread1 returns 1 Thread2 returns 10 Thread3 returns 10 ==2430== ==2430== HEAP SUMMARY: ==2430== […]

C动态内存分配和sizeof()

我在理解这两个代码段之间的区别时遇到了一些麻烦:我使用以下语句在代码中动态地为整数数组分配空间 int *arr = calloc(cnt, sizeof(int)); 在另一个函数中,我传入arr,我想确定arr中的大小(元素数量)。 我打电话的时候 int arr_sz = sizeof(arr)/sizeof(int); 它只返回1,这只是我假设(4/4)= 1的两个参数的int中的字节数。 我只是假设它与使用数组相同 int arr[8]; int arr_sz = sizeof(arr)/sizeof(int); 它返回数组中实际的元素数。 如果有人能够清除这一点,那就太好了。 谢谢!

垃圾值如何分配给c中的变量

C代码: int a; printf(“\n\t %d”,a); // It’ll print some garbage value; 那么如何将这些垃圾值分配给C中窗帘后面的未初始化变量? 这是否意味着C首先将内存分配给变量’a’然后该内存位置的内容变为’a’的值? 或者是其他东西?

‘全球’和’静态全球’之间的区别

全局变量的范围在所有文件中,而静态全局变量的范围只是声明它的文件。 为什么这样? 全局或静态全局变量存储在内存中的哪个位置?

Memcpy()在安全编程中?

我最近偶然发现了一篇声称微软在其安全编程商店中禁止使用memcpy()函数的文章 。 我了解该function固有的漏洞,但是有必要完全禁止它的使用吗? 我写的程序应该完全避免使用memcpy() ,还是只是确保安全使用它? 有哪些替代品可以提供类似但更安全的function?

现代处理器上的内存对齐?

我经常看到如下代码,例如,在内存中表示一个大位图: size_t width = 1280; size_t height = 800; size_t bytesPerPixel = 3; size_t bytewidth = ((width * bytesPerPixel) + 3) & ~3; /* Aligned to 4 bytes */ uint8_t *pixelData = malloc(bytewidth * height); (也就是说,一个位图被分配为一个连续的内存块,其字节bytewidth与一定数量的字节对齐,最常见的是4.) 然后通过以下方式给出图像上的一个点: pixelData + (bytewidth * y) + (bytesPerPixel * x) 这引出了两个问题: 对齐像这样的缓冲区会对现代处理器产生性能影响吗? 我应该担心对齐,还是编译器会处理这个问题? 如果它确实有影响,有人可以指向我找到各种处理器的理想字节对齐的资源吗? 谢谢。

AVX标量操作要快得多

我测试了以下简单的function void mul(double *a, double *b) { for (int i = 0; i<N; i++) a[i] *= b[i]; } 具有非常大的数组,因此它是内存带宽限制。 我使用的测试代码如下。 当我用-O2编译时需要1.7秒。 当我用-O2 -mavx编译时,它只需要1.0秒。 非vex编码的标量操作慢了70%! 为什么是这样? 这是-O2和-O2 -mavx的程序集。 <img src="http://sofzh.miximages.com/c/otliN.png" alt=" -O2 和 -O2 -mavx 的vimddif”> https://godbolt.org/g/w4p60f 系统:i7-6700HQ@2.60GHz(Skylake)32 GB内存,Ubuntu 16.10,GCC 6.3 测试代码 //gcc -O2 -fopenmp test.c //or //gcc -O2 -mavx -fopenmp test.c #include #include #include #include […]