前言
sizeof
在C语言中比较的常见,需要熟悉正确的使用
- 需要熟悉基本数据类型、数组、指针、结构体的字节大小
- 防止计算出错,引起内存的越界访问。
实例与分析
- 嵌入式软件开发中,会经常遇到缓冲区溢出、内存溢出、栈溢出、内存写穿等问题
- 需要实时调试验证自己的内存操作,无论是静态还是动态的内存,地址的计算、指针的计算,是否正确。
#include <rtthread.h>
#include <string.h>
#define TEST_BUF_SIZE 32
struct test_msg
{
rt_uint32_t id;
rt_uint32_t cmd;
rt_uint32_t value;
rt_uint8_t *data;
rt_uint32_t data_len;
};
void dump_struct_size(void)
{
rt_kprintf("sizeof(struct rt_thread)=%d\n", sizeof(struct rt_thread));
rt_kprintf("sizeof(struct rt_memheap)=%d\n", sizeof(struct rt_memheap));
rt_kprintf("sizeof(struct rt_device)=%d\n", sizeof(struct rt_device));
rt_kprin