Tag: 大小

C标准是否要求n个元素数组的大小是元素大小的n倍?

C标准是否要求n个元素数组的大小是元素大小的n倍,可以通过显式语句还是通过严格的逻辑推理来满足其要求? 例如, int (*x)[5] = malloc(5 * sizeof **x); 无法为五个int的数组请求足够的空间? C 2011 [N1570] 6.5.3.4 7显示了将数组中的元素数量计算为sizeof array / sizeof array[0] 。 但是,例子不是标准的规范部分(根据前言第8段)。 6.2.5 20表示数组类型描述了具有特定类型的连续分配的非空对象集,但对所需的总内存没有提及。 这只是一个语言律师问题; 实际的实现是无关紧要的。 (为了安抚那些想要具体示例的人,假设一个C实现需要对大型数组进行额外的内存管理,因此创建一个数组需要创建一些额外的数据来帮助管理内存。)

有哪些重构方法可以减少编译代码的大小?

我有一个需要新function的传统固件应用程序。 应用程序的大小已经接近设备的有限闪存容量,并且少数新function和变量将其推向了边缘。 打开编译器优化可以解决这个问题,但客户对这样做很谨慎,因为它们过去曾导致过失败。 那么,在重构C代码以产生更小的输出时,需要注意哪些常见的事情?

如何在函数内获取数组大小?

我无法找到从函数中获取数组大小的方法。 这是我的代码: #include void printBuff(char *buf); int main() { char arr[12] = “csdlnclskjn”; printf(“Array size: %d, element size: %d. “,sizeof(arr), sizeof(arr[0])); printBuff(arr); return 0; } void printBuff(char *buf){ printf(“Array size: %d, element size: %d.”,sizeof(buf), sizeof(buf[0])); } 如上所示,printBuff与main函数中的第二行相同。 但是,输出是不同的: 数组大小:12,元素大小:1。数组大小:4,元素大小:1。 考虑一下,我理解为什么printBuff()方法中的输出为4。 实际上,arr是指向数组第一个元素的指针。 在32位体系结构上,sizeof(arr)将返回4,在64位上它将返回8.我不明白为什么sizeof(arr)返回数组的大小而不是字节数在main()函数中使用时的指针。 毕竟,arr,当在main()中调用时,仍然是一个指针,对吧? 所以我的问题是: 为什么sizeoff()的解释会有所不同,具体取决于使用它的上下文? 这取决于什么? 如何从函数中获取实际的数组大小(数组中的元素数),而不将大小作为参数传递,而不使用迭代数组的方法,同时递增计数器直到达到’\ 0′ – 只是无论上下文如何,获取数组大小的最简单方法。 顺便提一下,负责记住数组大小的编译器/系统在哪里存储数组的大小? 它是如何与数组相关联的?它是如何检索的? 我想使用sizeof(buf),/ sizeof(buf [0])迭代数组作为数组的大小,但显然这是不可能的。

可执行文件的大小?

我创建了一个非常小的代码来添加两个整数,并将结果保存在另一个变量中,包括汇编语言和c语言。 程序集中的代码花费了我617个字节,但C中的代码需要25k字节!! 为什么会有巨大差异? 另外,我如何查看我编写的C代码的程序集符号指令?

C中的精确宽度整数类型(stdint.h)

我希望char,short和int类型的宽度为1,2和4字节。 我在我的源代码中包含了一个stdint.h标题。 这是否保证int8_t,int16_t和int32_t整数类型的宽度是指定的? 实现这一目标的最佳方法是什么?

为什么数据类型的大小会随着操作系统的变化而变化?

在一次采访中我问过这个问题,在某些操作系统中, char大小是2个字节,但在某些操作系统中它是4个字节或不同。 为什么会这样? 为什么它与其他基本类型不同,例如int ?

包含两个指针的struct的大小

这个结构的大小是多少? (32位系统计算。不是64位。) struct list_element { short data; struct list_element* next; struct list_element* prev; }; 我试过用这些公式计算大小: (sizeof(list_element *)+ sizeof(短))+((sizeof(list_element *)* 2) (4 + 2)+(4 * 2)= 6 + 8 = 14 (sizeof(短))+(sizeof(list_element *)* 2) 2 +(4 * 2)= 2 + 8 = 10 (sizeof(list_element *)+ sizeof(list_element *)+ sizeof(short))+(sizeof(list_element *)* 2) (4 + 4 + 2)+(4 * […]

在C中读取字符串

如果我正在使用C gets(),并且我正在从用户那里读取一个字符串,但我不知道我需要多大的缓冲区,并且输入可能非常大。 有没有办法可以确定用户输入的字符串有多大,然后分配内存然后将其放入变量中? 或者至少是一种接受输入而不知道它有多大的方法,有可能它不适合我已经分配的缓冲区。

如何声明具有任意大小的数组

好的,这是一个C编程的家庭作业问题。 但我真的被卡住了。 我要求用户输入单词,然后我将输入插入数组,但我无法控制用户键入的单词数。 我想我要问的是如何在C中声明一个数组而不声明其长度并且不询问用户应该是多长。 我知道这与malloc有关,但是如果你能给我一些如何做的例子,我会非常感激。

C程序中.bss段的模糊行为

我在下面编写了简单的C程序(test.c): – #include int main() { return 0; } 并执行以下内容以了解.bss段中的大小更改。 gcc test.c -o test size test 输出结果如下: – text data bss dec hex filename 1115 552 8 1675 68b test 我没有声明全局或静态范围。 所以请解释为什么bss段大小为8个字节。 我做了以下改变: – #include int x; //declared global variable int main() { return 0; } 但令我惊讶的是,输出与以前相同: – text data bss dec hex filename 1115 […]