Tag: 内存

Memset与步幅

使用OpenGL,很多时候为了提高效率而需要对数据进行大幅度提升。 例如,内存结构将是顶点颜色 – 正常 – 顶点 – 颜色 – 正常…等。 是否有任何可行的选项可以改变,例如,只使用某种memset变体(即不使用循环)更改内存的颜色部分。 还有问题,是否存在循环memset这样的事情? 例如,在由四个浮点数组成的颜色数组中,将它们全部设置为特定颜色。

打印一系列字符时遇到问题?

由于我不太了解我遇到的整体问题,因此调试变得非常困难。 char *o_key_pad = (char*)malloc(SHA256_DIGEST_LENGTH*sizeof(char)); for(int i = 0; i < SHA256_DIGEST_LENGTH; i++){ o_key_pad[i] = 'a'; } printf("%s\n", o_key_pad); char *i_key_pad = (char*)malloc(SHA256_DIGEST_LENGTH*sizeof(char)); for(int i = 0; i < SHA256_DIGEST_LENGTH; i++){ i_key_pad[i] = 'b'; } printf("%s\n", o_key_pad); printf("%s\n", i_key_pad); 我获得了输出: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 为什么数组’o_key_pad’扩展到包含我放在数组’i_key_pad’中的任何内容,看起来像某种内存问题? 注意:我知道它可以更有效地完成,但为了更清楚地表明我的观点,我已经这样做了。

特定内存地址的内容与gdb中预期的不同

我有类型为int的变量i,其值为129.我在gdb中使用了此变量的各种表示。 # Decimal format of i (gdb) p/di $18 = 129 # Binary format of i (gdb) p/ti $19 = 10000001 # Address of variable i (gdb) p &i $20 = (int *) 0xbffff320 # Binary format displayed at one byte (gdb) x /tb &i 0xbffff320: 10000001 # Decimal format displayed at four bytes (one […]

即使它分配的内存少于ulimit限制的内存,Proc也会崩溃

我通过ulimit -s 2000设置堆栈大小为2000Kb,为硬限制设置ulimit -Ss 2000。 在下面的程序中,我已经分配了appox 2040000(510000 x 4)个字节,这个字节小于我的限制即。 2048000(2000 * 4)字节,但我看到我的程序崩溃了! 任何人都可以建议为什么会这样。 #include #include int main() { int a[510000] = {0}; a[510000] = 1; printf(“%d”, a[510000]); fflush(stdout); sleep(70); } 编辑1:崩溃不是因为数组索引超出限制,因为我尝试降低索引并仍然崩溃。 只有当我通过ulimit限制时才会发生这种情况。

为什么编译器允许字符串文字不是const?

内存中的文字究竟在哪里? (见下面的例子) 我不能修改文字,所以它应该是一个const char *,虽然编译器允许我使用char *,即使有大多数编译器标志也没有警告。 虽然const char *类型的隐式转换为char *类型给了我一个警告,见下文(在GCC上测试,但它在VC ++ 2010上表现相似)。 另外,如果我修改一个const char的值(下面有一个技巧,GCC会更好地给我一个警告),它没有给出错误,我甚至可以在GCC上修改并显示它(即使我猜它仍然是未定义的行为,我想知道为什么它没有对文字做同样的事情)。 这就是为什么我要问那些文字存储在哪里,以及哪些更常见的const应该存储? const char* a = “test”; char* b = a; /* warning: initialization discards qualifiers from pointer target type (on gcc), error on VC++2k10 */ char *c = “test”; // no compile errors c[0] = ‘p’; /* bus error when execution […]

使用带指针的2 D数组的4种不同方法,这是对的吗? 解释会有很大帮助

下面的四个程序输入一个二维数组,然后打印出来。 第一个打印出垃圾值,并发出一些警告(我不明白)。 第二个工作正常,因为我相信二维数组线性存储在内存中,它也有意义。 第3个工作正常,但我不知道为什么它的工作原理。 第四个也适用。 因此,如果有人能够解释每种方法的运作方式,那将会很有帮助 我担心我对指针如何工作的理解并不像我想象的那么好。 int main(){ int n; int a [3][4]; int i=0,j=0,count=0; for(i=0;i<3;i++){ for(j=0;j<4;j++){ scanf("%d",(a+4*i+j)); // Output-514623632 514623648 514623664 514623680 514623696 514623712 514623728 514623744 514623760 514623776 514623792 514623808 } } for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d\t",*(a+4*i+j)); } } return 0; } Warnings -solution.c:15:21: warning: format '%d' expects argument of type 'int *', but argument […]

使用指针知道数组的大小

如何使用malloc分配的指针知道数组的大小? #include int main(){ int *ptr = (int *)malloc(sizeof(int * 10)); printf(“Size:%d”,sizeof(ptr)); free(ptr_one); return 0; } 在这种情况下,我只得到指针的大小,即8.如何修改代码以获得40的数组大小。

不兼容的C型错误?

uint32 InterruptLatency; uint8 measurements[32]; char buf[256]; int kernelinterrupt time() { fscanf(fp,”%lu”, InterruptLatency); // I am reading the data from kernel which is not shown here measurements[17] = InterrupLatency; buf = &measurements; // I am getting error here as below // after storing it in buffer I am sending the data from but to another layer […]

叉子(); C中的方法:确定顺序

我试图理解叉子在叉子上是如何工作的,但我在某处误解了某些东西。 去年我的教授给了我一个测试,但是我无法回复它:我们有3个任务(进程或线程),使用以下伪代码: Th1 { display “Hello 1” } Th2 { display “Hello 2” } Th3 { display “Hello 3” } main() { Fork(Th1);Fork(Th2);Fork(Th3); } 问题是: Which is the order of the execution of these tasks? Why? Which is the order of the execution of these tasks? Why? 我怎么回复这个? 是否有任何指南或任何有用的资源我可以理解叉子,信号量和内存分配? 我是低级编程的真正新手。

Windows下C程序的内存使用情况

可能重复: 在Windows下查找程序在c中使用的总内存 如何在Windows下以c语言获取程序的内存使用量并将该值放在输出文件中 (背景:我正在通过实施排序算法来比较一些统计数据上的两种语言。) 有没有这样做的程序……