Il 05/05/19 15:07, Roland Hughes ha scritto:
On 5/5/19 5:00 AM, interest-requ...@qt-project.org wrote:It makes for a lot of documentation in the embedded system world where every static_cast<>() has to be documented in the code and justified in a formal code review which produces even more documentation. It also makes for some fancy dancing on 32-bit embedded targets where a uint would be big enough to hold the size of something but an int falls short.No, the size of something definitely fits in int on 32-bit systems. And why do you need to do any static_cast in the first place?
Question: "why do you need any static_cast?".
Virtually every English speaking embedded system shop uses the Barr standard. https://barrgroup.com/Embedded-Systems/Books/Embedded-C-Coding-Standard While each shop tweaks it for C++, C-style casts are explicitly forbidden (at least in every shop I've been at). None can make it through formal review. In their C++ presentation slides the Barr group is a bit softer on their wording. Less so in actuality, but the slides are recorded forever. https://barrgroup.com/Embedded-Systems/How-To/Getting-Started-With-Cplusplus
Answer 1): A standard tells me not to use C-style casts. Does it answer the question? No.
======== Next is type casting, when we use C style cast, there are times when we are just kind of smashing “Square peg into a round a hole” this is potentially dangerous. Because C++ is a lot more finicky about type checking, the compiler will try to catch bad cast for us. There is no way of getting around the need to do type casting. As you move forward, consider always using the C++ cast operators, while these will look a little foreign and you may need to occasionally look up, which one to use in which situation, they are likely to ensure safe cast in your program. As a general rule try to use static cast, this works for most data type casting. Occasionally you will need to use reinterpret cast. It’s a closest thing to a real C style cast. Since we don’t recommend using RTTI, dynamic cast really won’t be of concern to you and we won’t really talk about it here. And then the last one is const cast, which used with extreme caution, this is similar to casting away the constance of an object, so unless you really know that the object you are casting away the constness from can be done safely we recommend being very careful in this area.
Answer 2: what the different kinds of built-in casts are in C++, and what they do.
Does it answer the question? No. (Note that this is quoting Barr, without saying it out loud explicitly).
As to size definitely fitting in an int, we will have to disagree. Sure, if a container is extremely short sighted and using an int internally to keep track of (and therefore limit) each allocated byte, effectively a neutered container, that statement would be correct. It never __SHOULD__ be correct.
Answer 3: an opinion/argument about whether a container should use an int to keep track of its capacity.
Does it answer the question? No.
https://code.woboq.org/gcc/include/limits.h.html ======== /* These assume 8-bit `char's, 16-bit `short int's, and 32-bit `int's and `long int's. */ /* Number of bits in a `char'. */ # define CHAR_BIT 8 ... /* Minimum and maximum values a `signed int' can hold. */ # define INT_MIN (-INT_MAX - 1) # define INT_MAX 2147483647 /* Maximum value an `unsigned int' can hold. (Minimum is 0.) */ # define UINT_MAX 4294967295U
Answer 4: random paste from a file proving that on a particular system a char is 8 bits and int is 32.
Does it answer the question? No.
The biggest physical container one can have is half of maximum physical RAM. A small application can easily need more than that. We can use the old chestnut of image processing which needs to load an entire hi-res image into memory to do some kind of transformation, writing the transformed bytes to a file output stream.
Answer 5: an argument about the biggest size of a "physical container" (whatever that is).
Does it answer the question? No.Is it even technically sound? That depends on the definition of a "physical container", which I cannot find anywhere ("physical container" yields 70k results on Google, 'C++ "physical container"' 2k, nothing that answers it).
If it just means "container", then the argument is broken -- the maximum size (in allocation units) is half of the *address space*, and the physical amount of RAM has nothing to do with anything.
More recently we can go back to the QSerialPort discussions happening on this list not all that long ago. The student level code examples trying to do all of the I/O in the main event loop with the buffer growing and growing in size.
Answer 6: an opinion wrt. the quality of some examples around QSerialPort. Does it answer the question? No.
===== What is, when I ignore the ready read? Has the internal buffer a max size? Because at the moment I have a memory leak and maybe it comes from that? ===== They only get to use up to half of 32-bit system RAM before the wheels come off the cart. Since it was serial comm, in theory the device could stop sending for a bit, allowing them to catch up, but not if they've already maxed out the buffer and crashed. This horrible student design could have ran even longer, hoping the sender got tired long enough for them to catch up.
Answer 7: some kind of merge of the previous two answers. Does it answer the original question? No.
I quick banged this out using CodeLite on my KDE Neon desktop. Only have a few more minutes to myself before I have to begin work this Sunday morning. I also did not go digging through the Qt source code. Just basing this on your previous comment that "the size definitely fits in int." Could be headed down rabbit hole but given Qt 6 is in planning/dev, size should no longer "just be an int." #include <stdio.h> #include <limits.h> #include <stdint.h> #include <sys/sysinfo.h> int main(int argc, char **argv) { struct sysinfo my_sysinfo; printf("hello world\n"); printf("INT_MAX: %d\n", INT_MAX); printf("UINT_MAX: %u\n\n", UINT_MAX); printf("INT32_MAX: %d\n", INT32_MAX); printf("UINT32_MAX: %ul\n\n", UINT32_MAX); printf("INT64_MAX: %ld\n", INT64_MAX); printf("UINT64_MAX: %llu\n\n", UINT64_MAX); sysinfo( &my_sysinfo); printf("totalram: %lu totalswap: %lu mem_unit: %u\n\n", my_sysinfo.totalram, my_sysinfo.totalswap, my_sysinfo.mem_unit); return 0; } ===== hello world INT_MAX: 2147483647 UINT_MAX: 4294967295 INT32_MAX: 2147483647 UINT32_MAX: 4294967295l INT64_MAX: 9223372036854775807 UINT64_MAX: 18446744073709551615 totalram: 25144201216 totalswap: 84807774208 mem_unit: 1 Press ENTER to continue... =====
Answer 7: some information about your system and some anecdote about your Sunday.
Does it answer the question? No.
Even with 24Gig of RAM in the box I can't get a Qt container larger than INT_MAX
Answer 8: an observation about the limitations of Qt containers. Does it answer the question? No.
I ass-u-me qsizetype is going to fix the initial problem by compiling to a platform specific integer size. It needs to take it a step further and become a platform specific unsigned size, especially for QByteArray. Why?
Answer 9: an observation regarding the fact that qsizetype would allow to lift this limitation, but it needs also to become an _unsigned_ type.
Does it answer the question? No. But it ups the ante with another question.
I haven't looked under the hood in a bit, but, just how many places do the tools/classes for some of the script kiddie favorites like XML and JSON have to bring in an entire file, then parse it? Unless that is somehow now parsing as it reads instead of requiring a hale and hole object, you still have a significant point of sporadic failure. Some files parse, others make it fall over.
Answer 10: an observation regarding parsing JSON/XML. Does it answer the first question? No. Does it answer the second question? No.
Right now it is almost impossible to obtain, at a cost effective price, human-life-at-risk quality RAM modules smaller than 1Gig. We "could" get a 512Meg module but it cost more. The hardware designers left room and power for an even larger module because by the time we get close to production it is entirely possible the cheaper multi-year production contract will be for the 2Gig modules. The vendor has already let us know this as they are trying to spin down the older lines. I have to believe that within 2 years the smallest module vendors will be willing to provide a 7-10 year production contract on will be 4Gig and they will be trying to push device manufacturers to abandon 32-bit targets even though the use can't justify 64-bit. The power consumption is what has to improve. Many medical devices have to run 7-10 days on a single battery pack. I'm actually kind of surprised Inogen has been able to get away with only 5 hours for a double battery pack but it probably has to do with the fact it can be plugged in to charge while running. https://www.inogen.com/pdf/96-06728-00-01-B-English-Only-Final-WEB.pdf ===== The battery will power the Inogen One® G4 withoutconnection to an external power source.When fully charged,a single battery will provide up to 2.7 hours of operation;a double battery will provide up to 5 hours of operation.The battery recharges when properly installed in the Inogen One® G4 and the concentrator is connected to AC or DC power.Recharging time is up to 3 hours for a single battery and 5 hours for a double battery.See information in the “Battery Care and Maintenance”section. ===== People are supposed to sleep for 8 hours.
Answer 11: a comment regarding obtaining RAM modules, and power consumption of a random hardware (?) product.
Does it answer the first question? No. Does it answer the second question? No. ==Result: please, let's stop this charade. This is *clearly* trolling, at this point, and a waste of everyone's time.
I'm officially calling for moderation on this person. Regards, -- Giuseppe D'Angelo | giuseppe.dang...@kdab.com | Senior Software Engineer KDAB (France) S.A.S., a KDAB Group company Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com KDAB - The Qt, C++ and OpenGL Experts
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest