Please clarify _Bool is a specifier or identifier?
Not that it really matters, but _Bool is listed in the standard as a "type specifier" (along with void, char, int, etc.)
Identifiers are "user-defined", so what matters here is that you can consider _Bool as a keyword of the C language starting with C99. That means it's part of the core language, and is not itself defined in some header, or something.
As such, it has a specific behavior. It's not like an 'int'. Assignments to a _Bool variable can only result in '0' or '1' values. Its actual "size" is implementation-defined though. So it depends. You shouldn't rely on it. You can use sizeof() to see how big it is on your specific platform.
This '0' and '1' specificity is trickier than it looks, although in most cases you shouldn't make that matter. Let's see:
bool b = 10; // b will actually contain '1' after this assignment
BUT, as the _Bool type may actually hold a much larger range of values from a low-level point of view, it could contain something else that 0 or 1 if you use pointers to one and alias it with a different type. Don't mess with _Bool!
stdbool.h, OTOH, is just a thin (but standard) layer on top of it. It usually defines 'bool' either with a macro such as:
#define bool _Bool
or with a typedef:
typedef _Bool bool;
and additionally defines 'true' and 'false'.