请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TM4C129CNCZAD 工具/软件:TI C/C++编译器
我有一个课程如下所示:
template<typename T> class ParameterCheck { public: ParameterCheck(volatile T* parameter_ptr,T init_value): last_value_(init_value), PARAMETER_PTR_(PARAMETER_PTR){}; 布尔DidChange (void){ 如果(Last_value_!=*Parameter_PTR_){ Last_value_=*参数_PTR_; 返回true; } 返回false; } private: T last_value_; volatile T* parameter_PTR_; };
在函数中,创建此类的数组,如下所示:
静态参数检查<Int32_t> i32_parameters[]={ ParameterCheck<Int32_t>(¶meter1,0), ParameterCheck<Int32_t>(¶meter2,0), ParameterCheck<Int32_t>(¶meter3,0), ParameterCheck<Int32_t>(¶meter4,0), ParameterCheck<Int32_t>(¶meter5,0), ParameterCheck<Int32_t>(¶meter6,0) ,}; 静态参数检查<uint64_t> u64_parameters[]={ 参数检查<uint64_t>(¶meter7,0ULL), 参数检查<uint64_t>(&}8,0ULL)参数 ;
当我编译该文件并检查映射文件中这些结构的大小时,i32_parameters解析为48,这意味着每个元素为8字节。 这就是我对一个在32位处理器上有in32_t和指针的类的期望。 但是,当我检查u64_parameters的大小时,它会报告32,表示每个元素为16字节。 它应该是4 + 8 = 12字节。 如果我使用u64_parameters 3而不是2个元素,则得到相同的结果。 为什么编译器在此处添加额外的4个字节? 是否有一些我没有考虑的调整? 我知道编译器应该满足4的内存宽度,但12是4的倍数。 是否有人对这种情况可能发生的原因有任何见解?