为什么我们使用 sizeof 使用 malloc ?[关闭]
-
23-12-2019 - |
题
使用目的是什么 sizeof
使用 malloc
在 C
?为什么有必要?
我的意思是我们可以使用 sizeof
但我们已经知道我们在内存中分配的大小(= 1000 字节)?
我是C初学者。这可能是一个非常明显的问题。
解决方案
数据类型和内存问题
答案在于数据类型。虽然你知道 有多少个物体 您想要为其分配内存,您可能不想费力地计算它们的大小。
可维护性也是如此
另外,如果这些成分以后发生变化怎么办?然后你就完蛋了,必须编辑所有内容。
所以这在你的例子中是不相关的,没有上下文。但是,如果您想要为更复杂的事物分配内存(例如,具有多个字段的结构),它确实变得非常重要和有用。
示例 1(这里不太重要):
char *s = malloc(100 * sizeof(char));
但是嘿,这只是 char
s,没关系,你可以这样做:
char *s = malloc(100);
一般有效。但这是搬起石头砸自己的脚,正如你将在下面看到的。
示例 2(已经有点重要了):
int *i = malloc(100 * sizeof(int));
当然,你可以这样写:
int *i = malloc(100 * 4);
也就是说,假设您只针对一种您非常了解的架构进行开发。
示例 3(开始变得相当重要了!):
typedef struct s_listelement{
int dataitem;
struct s_listelement *link;
} t_listelement;
t_listement *le = malloc(sizeof(t_listelement));
现在想象一下链接列表项的结构包含一堆其他字段......
你愿意相信吗 sizeof()
, ,或者自己去玩玩数学?
其他提示
假设你想分配内存来存储 int
s。你最初的猜测是,好吧,我需要 n
整数,每个整数需要 x
字节。所以空间将是 n*x
字节。
但实际上这个 x
取决于架构。可能是 16 位、32 位等。所以为了让你的代码能够在不同的环境下工作,建议使用 n*sizeof(int)
代替 n*x
.
例如,如果需要为 10 个整数分配空间:
int *p=malloc(sizeof(int)*10);
如果改变大小会发生什么 mallocated
?
您必须 1) 再次计算新大小(抛开多个目标架构问题,您必须计算每个目标中的新大小),2) 搜索所有 malloc(1000)
, ,确保它指的是 mallocated
(这可能不明显)并替换为新尺寸。
您使用时不会遇到这两个问题 sizeof
. 。因此使用 sizeof
导致更易于维护和可读的代码。